aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Clason <c.clason@uni-graz.at>2025-04-03 09:54:08 +0200
committerChristian Clason <ch.clason+github@icloud.com>2025-04-03 10:15:11 +0200
commit5cdfa3324f4cafe2ac98d2e9ec4e812aa9c0598e (patch)
tree00bce826f85eabfb1df192d3bc14442ec7e59e7a
parent18caa5fb239542107f27c054e54e0bf3a33a2278 (diff)
downloadrneovim-5cdfa3324f4cafe2ac98d2e9ec4e812aa9c0598e.tar.gz
rneovim-5cdfa3324f4cafe2ac98d2e9ec4e812aa9c0598e.tar.bz2
rneovim-5cdfa3324f4cafe2ac98d2e9ec4e812aa9c0598e.zip
vim-patch:9.1.1268: filetype: dax files are not recognized
Problem: filetype: dax files are not recognized Solution: detect "*.dax" as dax filetype, include dax filetype and syntax plugin (Anarion Dunedain) Data Analysis Expressions (DAX) is a formula expression language used in Analysis Services, Power BI, and Power Pivot in Excel. DAX formulas include functions, operators, and values to perform advanced calculations and queries on data in related tables and columns in tabular data models. DAX language overview: - https://learn.microsoft.com/en-us/dax/dax-overview closes: vim/vim#17035 https://github.com/vim/vim/commit/7f518e044fbc60cffdf2c0f611cc8c4dc35c338c Co-authored-by: Anarion Dunedain <anarion80@gmail.com>
-rw-r--r--runtime/ftplugin/dax.vim16
-rw-r--r--runtime/lua/vim/filetype.lua1
-rw-r--r--runtime/syntax/dax.vim151
-rw-r--r--test/old/testdir/test_filetype.vim1
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'],