diff options
-rw-r--r-- | runtime/ftplugin/dax.vim | 16 | ||||
-rw-r--r-- | runtime/lua/vim/filetype.lua | 1 | ||||
-rw-r--r-- | runtime/syntax/dax.vim | 151 | ||||
-rw-r--r-- | test/old/testdir/test_filetype.vim | 1 |
4 files changed, 169 insertions, 0 deletions
diff --git a/runtime/ftplugin/dax.vim b/runtime/ftplugin/dax.vim new file mode 100644 index 0000000000..e5783f03a3 --- /dev/null +++ b/runtime/ftplugin/dax.vim @@ -0,0 +1,16 @@ +" Vim filetype plugin +" Language: Data Analysis Expressions (DAX) +" Maintainer: Anarion Dunedain <anarion80@gmail.com> +" Last Change: 2025 Apr 2 + +if exists('b:did_ftplugin') + finish +endif + +let b:did_ftplugin = 1 + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// + +setlocal commentstring=//\ %s + +let b:undo_ftplugin = 'setl com< cms<' diff --git a/runtime/lua/vim/filetype.lua b/runtime/lua/vim/filetype.lua index a35a1a32b3..caa937aa83 100644 --- a/runtime/lua/vim/filetype.lua +++ b/runtime/lua/vim/filetype.lua @@ -380,6 +380,7 @@ local extension = { dat = detect.dat, Dat = detect.dat, DAT = detect.dat, + dax = 'dax', dcd = 'dcd', decl = detect.decl, dec = detect.decl, diff --git a/runtime/syntax/dax.vim b/runtime/syntax/dax.vim new file mode 100644 index 0000000000..12e54ee1f5 --- /dev/null +++ b/runtime/syntax/dax.vim @@ -0,0 +1,151 @@ +" Vim syntax file +" Language: Data Analysis Expressions (DAX) +" Maintainer: Anarion Dunedain <anarion80@gmail.com> +" Last Change: +" 2025 Mar 28 First version + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif +let s:keepcpo = &cpo +set cpo&vim + +" There are DAX functions with dot in the name (like VARX.S) +setlocal iskeyword+=. +" DAX is case insensitive +syn case ignore + +" DAX statements +syn keyword daxStatement DEFINE EVALUATE MEASURE RETURN VAR +syn match daxStatement "ORDER\ BY" +syn match daxStatement "START\ AT" + +" TODO +syn keyword daxTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained + +" DAX functions +syn keyword daxFunction + \ ABS ACCRINT ACCRINTM ACOS ACOSH ACOT ACOTH + \ ADDCOLUMNS ADDMISSINGITEMS ALL ALLCROSSFILTERED ALLEXCEPT ALLNOBLANKROW ALLSELECTED + \ AMORDEGRC AMORLINC AND APPROXIMATEDISTINCTCOUNT ASIN ASINH ATAN + \ ATANH AVERAGE AVERAGEA AVERAGEX BETA.DIST BETA.INV BITAND + \ BITLSHIFT BITOR BITRSHIFT BITXOR BLANK CALCULATE CALCULATETABLE + \ CALENDAR CALENDARAUTO CEILING CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT + \ CLOSINGBALANCEMONTH CLOSINGBALANCEQUARTER CLOSINGBALANCEYEAR COALESCE COLUMNSTATISTICS COMBIN COMBINA + \ COMBINEVALUES CONCATENATE CONCATENATEX CONFIDENCE.NORM CONFIDENCE.T CONTAINSROW + \ CONTAINSSTRING CONTAINSSTRINGEXACT CONVERT COS COSH COT COTH + \ COUNT COUNTA COUNTAX COUNTBLANK COUNTROWS COUNTX COUPDAYBS + \ COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD CROSSFILTER CROSSJOIN + \ CUMIPMT CUMPRINC CURRENCY CURRENTGROUP CUSTOMDATA DATATABLE DATE + \ DATEADD DATEDIFF DATESBETWEEN DATESINPERIOD DATESMTD DATESQTD DATESYTD + \ DATEVALUE DAY DB DDB DEGREES DETAILROWS DISC + \ DISTINCT column DISTINCT table DISTINCTCOUNT DISTINCTCOUNTNOBLANK DIVIDE DOLLARDE DOLLARFR + \ DURATION EARLIER EARLIEST EDATE EFFECT ENDOFMONTH ENDOFQUARTER + \ ENDOFYEAR EOMONTH ERROR EVALUATEANDLOG EVEN EXACT EXCEPT + \ EXP EXPON.DIST FACT FALSE FILTER FILTERS FIND + \ FIRST FIRSTDATE FIXED FLOOR FORMAT FV GCD + \ GENERATE GENERATEALL GENERATESERIES GEOMEAN GEOMEANX GROUPBY HASONEFILTER + \ HASONEVALUE HOUR IF IF.EAGER IFERROR IGNORE INDEX + \ INFO.ALTERNATEOFDEFINITIONS INFO.ANNOTATIONS INFO.ATTRIBUTEHIERARCHIES INFO.ATTRIBUTEHIERARCHYSTORAGES INFO.CALCDEPENDENCY INFO.CALCULATIONGROUPS INFO.CALCULATIONITEMS + \ INFO.CATALOGS INFO.CHANGEDPROPERTIES INFO.COLUMNPARTITIONSTORAGES INFO.COLUMNPERMISSIONS INFO.COLUMNS INFO.COLUMNSTORAGES INFO.CSDLMETADATA + \ INFO.CULTURES INFO.DATACOVERAGEDEFINITIONS INFO.DATASOURCES INFO.DELTATABLEMETADATASTORAGES INFO.DEPENDENCIES INFO.DETAILROWSDEFINITIONS INFO.DICTIONARYSTORAGES + \ INFO.EXCLUDEDARTIFACTS INFO.EXPRESSIONS INFO.EXTENDEDPROPERTIES INFO.FORMATSTRINGDEFINITIONS INFO.FUNCTIONS INFO.GENERALSEGMENTMAPSEGMENTMETADATASTORAGES INFO.GROUPBYCOLUMNS + \ INFO.HIERARCHIES INFO.HIERARCHYSTORAGES INFO.KPIS INFO.LEVELS INFO.LINGUISTICMETADATA INFO.MEASURES INFO.MODEL + \ INFO.OBJECTTRANSLATIONS INFO.PARQUETFILESTORAGES INFO.PARTITIONS INFO.PARTITIONSTORAGES INFO.PERSPECTIVECOLUMNS INFO.PERSPECTIVEHIERARCHIES INFO.PERSPECTIVEMEASURES + \ INFO.PERSPECTIVES INFO.PERSPECTIVETABLES INFO.PROPERTIES INFO.QUERYGROUPS INFO.REFRESHPOLICIES INFO.RELATEDCOLUMNDETAILS INFO.RELATIONSHIPINDEXSTORAGES + \ INFO.RELATIONSHIPS INFO.RELATIONSHIPSTORAGES INFO.ROLEMEMBERSHIPS INFO.ROLES INFO.SEGMENTMAPSTORAGES INFO.SEGMENTSTORAGES INFO.STORAGEFILES + \ INFO.STORAGEFOLDERS INFO.STORAGETABLECOLUMNS INFO.STORAGETABLECOLUMNSEGMENTS INFO.STORAGETABLES INFO.TABLEPERMISSIONS INFO.TABLES INFO.TABLESTORAGES + \ INFO.VARIATIONS INFO.VIEW.COLUMNS INFO.VIEW.MEASURES INFO.VIEW.RELATIONSHIPS INFO.VIEW.TABLES INT INTERSECT + \ INTRATE IPMT ISAFTER ISBLANK ISCROSSFILTERED ISEMPTY ISERROR + \ ISEVEN ISFILTERED ISINSCOPE ISLOGICAL ISNONTEXT ISNUMBER ISO.CEILING + \ ISODD ISONORAFTER ISPMT ISSELECTEDMEASURE ISSUBTOTAL ISTEXT KEEPFILTERS + \ LAST LASTDATE LCM LEFT LEN LINEST LINESTX + \ LN LOG LOG10 LOOKUPVALUE LOWER MATCHBY MAX + \ MAXA MAXX MDURATION MEDIAN MEDIANX MID MIN + \ MINA MINUTE MINX MOD MONTH MOVINGAVERAGE MROUND + \ NATURALINNERJOIN NATURALLEFTOUTERJOIN NETWORKDAYS NEXT NEXTDAY NEXTMONTH NEXTQUARTER + \ NEXTYEAR NOMINAL NONVISUAL NORM.DIST NORM.INV NORM.S.DIST NORM.S.INV + \ NOT NOW NPER ODD ODDFPRICE ODDFYIELD ODDLPRICE + \ ODDLYIELD OFFSET OPENINGBALANCEMONTH OPENINGBALANCEQUARTER OPENINGBALANCEYEAR OR ORDERBY + \ PARALLELPERIOD PARTITIONBY PATH PATHCONTAINS PATHITEM PATHITEMREVERSE PATHLENGTH + \ PDURATION PERCENTILE.EXC PERCENTILE.INC PERCENTILEX.EXC PERCENTILEX.INC PERMUT PI + \ PMT POISSON.DIST POWER PPMT PREVIOUS PREVIOUSDAY PREVIOUSMONTH + \ PREVIOUSQUARTER PREVIOUSYEAR PRICE PRICEDISC PRICEMAT PRODUCT PRODUCTX + \ PV QUARTER QUOTIENT RADIANS RAND RANDBETWEEN RANGE + \ RANK RANK.EQ RANKX RATE RECEIVED RELATED RELATEDTABLE + \ REMOVEFILTERS REPLACE REPT RIGHT ROLLUP ROLLUPADDISSUBTOTAL ROLLUPGROUP + \ ROLLUPISSUBTOTAL ROUND ROUNDDOWN ROUNDUP ROW ROWNUMBER RRI + \ RUNNINGSUM SAMEPERIODLASTYEAR SAMPLE SEARCH SECOND SELECTCOLUMNS SELECTEDMEASURE + \ SELECTEDMEASUREFORMATSTRING SELECTEDMEASURENAME SELECTEDVALUE SIGN SIN SINH SLN + \ SQRT SQRTPI STARTOFMONTH STARTOFQUARTER STARTOFYEAR STDEV.P STDEV.S + \ STDEVX.P STDEVX.S SUBSTITUTE SUBSTITUTEWITHINDEX SUM SUMMARIZE SUMMARIZECOLUMNS + \ SUMX SWITCH SYD T.DIST T.DIST.2T T.DIST.RT T.INV + \ T.INV.2t TAN TANH TBILLEQ TBILLPRICE TBILLYIELD TIME + \ TIMEVALUE TOCSV TODAY TOJSON TOPN TOTALMTD TOTALQTD + \ TOTALYTD TREATAS TRIM TRUE TRUNC Table Constructor UNICHAR + \ UNICODE UNION UPPER USERCULTURE USERELATIONSHIP USERNAME USEROBJECTID + \ USERPRINCIPALNAME UTCNOW UTCTODAY VALUE VALUES VAR.P VAR.S + \ VARX.P VARX.S VDB WEEKDAY WEEKNUM WINDOW XIRR + \ XNPV YEAR YEARFRAC YIELD YIELDDISC YIELDMAT + +" CONTAINS is a vim syntax keyword and can't be a defined keyword +syn match daxFunction "CONTAINS" + +" Numbers +" integer number, or floating point number without a dot. +syn match daxNumber "\<\d\+\>" +" floating point number, with dot +syn match daxNumber "\<\d\+\.\d*\>" + +syn match daxFloat "[-+]\=\<\d\+[eE][\-+]\=\d\+" +syn match daxFloat "[-+]\=\<\d\+\.\d*\([eE][\-+]\=\d\+\)\=" +syn match daxFloat "[-+]\=\<\.\d\+\([eE][\-+]\=\d\+\)\=" + +" String and Character constants +syn region daxString start=+"+ end=+"+ + +" DAX Table and Column names +syn region daxTable start=+'+ms=s+1 end=+'+me=e-1 +syn region daxColumn matchgroup=daxParen start=/\[/ end=/\]/ + +" Operators +syn match daxOperator "+" +syn match daxOperator "-" +syn match daxOperator "*" +syn match daxOperator "/" +syn match daxOperator "\^" +syn match daxOperator "\ NOT(\s\|\\)" +syn match daxOperator "\ IN\ " +syn match daxOperator "&&" +syn match daxOperator "&" +syn match daxOperator "\\|\\|" +syn match daxOperator "[<>]=\=" +syn match daxOperator "<>" +syn match daxOperator "=" +syn match daxOperator ">" +syn match daxOperator "<" + +" Comments +syn region daxComment start="\(^\|\s\)\//" end="$" contains=daxTodo +syn region daxComment start="/\*" end="\*/" contains=daxTodo + +" Define highlighting +hi def link daxComment Comment +hi def link daxNumber Number +hi def link daxFloat Float +hi def link daxString String +hi def link daxStatement Keyword +hi def link daxOperator Operator +hi def link daxFunction Function +hi def link daxTable Number +hi def link daxColumn Statement +hi def link daxParen Delimiter +hi def link daxTodo Todo + +let b:current_syntax = "dax" + +let &cpo = s:keepcpo +unlet! s:keepcpo + +" vim: ts=8 diff --git a/test/old/testdir/test_filetype.vim b/test/old/testdir/test_filetype.vim index 4e54ff598f..8347178f79 100644 --- a/test/old/testdir/test_filetype.vim +++ b/test/old/testdir/test_filetype.vim @@ -213,6 +213,7 @@ func s:GetFilenameChecks() abort \ 'dafny': ['file.dfy'], \ 'dart': ['file.dart', 'file.drt'], \ 'datascript': ['file.ds'], + \ 'dax': ['file.dax'], \ 'dcd': ['file.dcd'], \ 'deb822sources': ['/etc/apt/sources.list.d/file.sources', 'any/etc/apt/sources.list.d/file.sources'], \ 'debchangelog': ['changelog.Debian', 'changelog.dch', 'NEWS.Debian', 'NEWS.dch', '/debian/changelog'], |