blob: 5778dbca4fa6b67b24ae9caae237164eb6ab3650 [file] [log] [blame]
Anarion Dunedaine74ec3f2025-04-03 21:08:25 +02001" Vim syntax file
2" Language: Power Query M
3" Maintainer: Anarion Dunedain <anarion80@gmail.com>
4" Last Change:
5" 2025 Apr 03 First version
6
7" quit when a syntax file was already loaded
8if exists("b:current_syntax")
9 finish
10endif
11
12let s:keepcpo = &cpo
13set cpo&vim
14
15" There are Power Query functions with dot or hash in the name
16setlocal iskeyword+=.
17setlocal iskeyword+=#
18
19setlocal foldmethod=syntax
20setlocal foldtext=getline(v:foldstart)
21
22" DAX is case sensitive
23syn case match
24
25" Any Power Query identifier
26syn match pqIdentifier "\<[a-zA-Z0-9$_#]*\>"
27
28" Fold on parenthesis
29syn region pqParenthesisFold start="(" end=")" transparent fold
30
31" Power Query keywords
32syn keyword pqKeyword section sections shared
33syn region pqKeyword start="\<let\>\c" end="\<in\>\c\%(\_s*$\)"me=s-2 transparent fold keepend containedin=ALLBUT,pqString,pqComment
34
35" Power Query types
36syn keyword pqType null logical number time date datetime datetimezone duration text binary type list record table function anynonnull none
37
38" Power Query conditionals
39syn keyword pqConditional if then else each
40
41" Power Query constants
42syn keyword pqConstant
43 \ Number.E Number.Epsilon Number.NaN
44 \ Number.NegativeInfinity Number.PI Number.PositiveInfinity
45
46" TODO
47syn keyword pqTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained
48
49" Numbers
50" integer number, or floating point number without a dot.
51syn match pqNumber "\<\d\+\>"
52" floating point number, with dot
53syn match pqNumber "\<\d\+\.\d*\>"
54
55syn match pqFloat "[-+]\=\<\d\+[eE][\-+]\=\d\+"
56syn match pqFloat "[-+]\=\<\d\+\.\d*\([eE][\-+]\=\d\+\)\="
57syn match pqFloat "[-+]\=\<\.\d\+\([eE][\-+]\=\d\+\)\="
58
59" String and Character constants
60syn region pqString start=+"+ end=+"+
61
62" Power Query Record
63syn region pqRecord matchgroup=pqParen start=/\[/ end=/\]/ contains=ALLBUT,pqIdentifier
64
65" Power Query List
66syn region pqList matchgroup=pqParen start=/{/ end=/}/ contains=ALLBUT,pqIdentifier
67
68" Operators
69syn match pqOperator "+"
70syn match pqOperator "-"
71syn match pqOperator "*"
72syn match pqOperator "/"
73syn match pqOperator "\<\(NOT\|AND\|OR\|AS\|IS\|META\)\>\c"
74syn match pqOperator "??"
75syn match pqOperator "&&"
76syn match pqOperator "&"
77syn match pqOperator "[<>]=\="
78syn match pqOperator "<>"
79syn match pqOperator "="
80syn match pqOperator ">"
81syn match pqOperator "<"
82
83" Comments
84syn region pqComment start="\(^\|\s\)\//" end="$" contains=pqTodo
85syn region pqComment start="/\*" end="\*/" contains=pqTodo
86
87" Power Query functions
88syn keyword pqFunction
89 \ #binary #date #datetime #datetimezone #duration #table #time
90 \ Access.Database AccessControlEntry.ConditionToIdentities Action.WithErrorContext
91 \ ActiveDirectory.Domains AdoDotNet.DataSource AdoDotNet.Query AdobeAnalytics.Cubes
92 \ AnalysisServices.Database AnalysisServices.Databases AzureStorage.BlobContents
93 \ AzureStorage.Blobs AzureStorage.DataLake AzureStorage.DataLakeContents
94 \ AzureStorage.Tables Binary.ApproximateLength Binary.Buffer
95 \ Binary.Combine Binary.Compress Binary.Decompress
96 \ Binary.From Binary.FromList Binary.FromText
97 \ Binary.InferContentType Binary.Length Binary.Range
98 \ Binary.Split Binary.ToList Binary.ToText
99 \ Binary.View Binary.ViewError Binary.ViewFunction
100 \ BinaryFormat.7BitEncodedSignedInteger BinaryFormat.7BitEncodedUnsignedInteger BinaryFormat.Binary
101 \ BinaryFormat.Byte BinaryFormat.ByteOrder BinaryFormat.Choice
102 \ BinaryFormat.Decimal BinaryFormat.Double BinaryFormat.Group
103 \ BinaryFormat.Length BinaryFormat.List BinaryFormat.Null
104 \ BinaryFormat.Record BinaryFormat.SignedInteger16 BinaryFormat.SignedInteger32
105 \ BinaryFormat.SignedInteger64 BinaryFormat.Single BinaryFormat.Text
106 \ BinaryFormat.Transform BinaryFormat.UnsignedInteger16 BinaryFormat.UnsignedInteger32
107 \ BinaryFormat.UnsignedInteger64 Byte.From Byte.Type Cdm.Contents
108 \ Character.FromNumber Character.ToNumber Combiner.CombineTextByDelimiter
109 \ Combiner.CombineTextByEachDelimiter Combiner.CombineTextByLengths Combiner.CombineTextByPositions
110 \ Combiner.CombineTextByRanges Comparer.Equals Comparer.FromCulture
111 \ Comparer.Ordinal Comparer.OrdinalIgnoreCase Csv.Document
112 \ Cube.AddAndExpandDimensionColumn Cube.AddMeasureColumn Cube.ApplyParameter
113 \ Cube.AttributeMemberId Cube.AttributeMemberProperty Cube.CollapseAndRemoveColumns
114 \ Cube.Dimensions Cube.DisplayFolders Cube.MeasureProperties
115 \ Cube.MeasureProperty Cube.Measures Cube.Parameters
116 \ Cube.Properties Cube.PropertyKey Cube.ReplaceDimensions
117 \ Cube.Transform Currency.From Currency.Type DB2.Database
118 \ Date.AddDays Date.AddMonths Date.AddQuarters
119 \ Date.AddWeeks Date.AddYears Date.Day
120 \ Date.DayOfWeek Date.DayOfWeekName Date.DayOfYear
121 \ Date.DaysInMonth Date.EndOfDay Date.EndOfMonth
122 \ Date.EndOfQuarter Date.EndOfWeek Date.EndOfYear
123 \ Date.From Date.FromText Date.IsInCurrentDay
124 \ Date.IsInCurrentMonth Date.IsInCurrentQuarter Date.IsInCurrentWeek
125 \ Date.IsInCurrentYear Date.IsInNextDay Date.IsInNextMonth
126 \ Date.IsInNextNDays Date.IsInNextNMonths Date.IsInNextNQuarters
127 \ Date.IsInNextNWeeks Date.IsInNextNYears Date.IsInNextQuarter
128 \ Date.IsInNextWeek Date.IsInNextYear Date.IsInPreviousDay
129 \ Date.IsInPreviousMonth Date.IsInPreviousNDays Date.IsInPreviousNMonths
130 \ Date.IsInPreviousNQuarters Date.IsInPreviousNWeeks Date.IsInPreviousNYears
131 \ Date.IsInPreviousQuarter Date.IsInPreviousWeek Date.IsInPreviousYear
132 \ Date.IsInYearToDate Date.IsLeapYear Date.Month
133 \ Date.MonthName Date.QuarterOfYear Date.StartOfDay
134 \ Date.StartOfMonth Date.StartOfQuarter Date.StartOfWeek
135 \ Date.StartOfYear Date.ToRecord Date.ToText
136 \ Date.WeekOfMonth Date.WeekOfYear Date.Year
137 \ DateTime.AddZone DateTime.Date DateTime.FixedLocalNow
138 \ DateTime.From DateTime.FromFileTime DateTime.FromText
139 \ DateTime.IsInCurrentHour DateTime.IsInCurrentMinute DateTime.IsInCurrentSecond
140 \ DateTime.IsInNextHour DateTime.IsInNextMinute DateTime.IsInNextNHours
141 \ DateTime.IsInNextNMinutes DateTime.IsInNextNSeconds DateTime.IsInNextSecond
142 \ DateTime.IsInPreviousHour DateTime.IsInPreviousMinute DateTime.IsInPreviousNHours
143 \ DateTime.IsInPreviousNMinutes DateTime.IsInPreviousNSeconds DateTime.IsInPreviousSecond
144 \ DateTime.LocalNow DateTime.Time DateTime.ToRecord
145 \ DateTime.ToText DateTimeZone.FixedLocalNow DateTimeZone.FixedUtcNow
146 \ DateTimeZone.From DateTimeZone.FromFileTime DateTimeZone.FromText
147 \ DateTimeZone.LocalNow DateTimeZone.RemoveZone DateTimeZone.SwitchZone
148 \ DateTimeZone.ToLocal DateTimeZone.ToRecord DateTimeZone.ToText
149 \ DateTimeZone.ToUtc DateTimeZone.UtcNow DateTimeZone.ZoneHours
150 \ DateTimeZone.ZoneMinutes Decimal.From Decimal.Type DeltaLake.Metadata
151 \ DeltaLake.Table Diagnostics.ActivityId Diagnostics.CorrelationId
152 \ Diagnostics.Trace DirectQueryCapabilities.From Double.From Double.Type
153 \ Duration.Days Duration.From Duration.FromText
154 \ Duration.Hours Duration.Minutes Duration.Seconds
155 \ Duration.ToRecord Duration.ToText Duration.TotalDays
156 \ Duration.TotalHours Duration.TotalMinutes Duration.TotalSeconds
157 \ Embedded.Value Error.Record Essbase.Cubes
158 \ Excel.CurrentWorkbook Excel.ShapeTable Excel.Workbook
159 \ Exchange.Contents Expression.Constant Expression.Evaluate
160 \ Expression.Identifier File.Contents Folder.Contents
161 \ Folder.Files Function.From Function.Invoke
162 \ Function.InvokeAfter Function.InvokeWithErrorContext Function.IsDataSource
163 \ Function.ScalarVector Geography.FromWellKnownText Geography.ToWellKnownText
164 \ GeographyPoint.From Geometry.FromWellKnownText Geometry.ToWellKnownText
165 \ GeometryPoint.From GoogleAnalytics.Accounts Graph.Nodes
166 \ Guid.From Guid.Type HdInsight.Containers HdInsight.Contents
167 \ HdInsight.Files Hdfs.Contents Hdfs.Files
168 \ Html.Table Identity.From Identity.IsMemberOf
169 \ IdentityProvider.Default Informix.Database Int16.From Int16.Type
170 \ Int32.From Int32.Type Int64.From Int64.Type Int8.From Int8.Type
171 \ ItemExpression.From ItemExpression.Item Json.Document
172 \ Json.FromValue Json.FromValue Lines.FromBinary
173 \ Lines.FromText Lines.ToBinary Lines.ToText
174 \ List.Accumulate List.AllTrue List.Alternate
175 \ List.AnyTrue List.Average List.Buffer
176 \ List.Combine List.ConformToPageReader List.Contains
177 \ List.ContainsAll List.ContainsAny List.Count
178 \ List.Covariance List.DateTimeZones List.DateTimes
179 \ List.Dates List.Difference List.Distinct
180 \ List.Durations List.FindText List.First
181 \ List.FirstN List.Generate List.InsertRange
182 \ List.Intersect List.IsDistinct List.IsEmpty
183 \ List.Last List.LastN List.MatchesAll
184 \ List.MatchesAny List.Max List.MaxN
185 \ List.Median List.Min List.MinN
186 \ List.Mode List.Modes List.NonNullCount
187 \ List.Numbers List.Percentile List.PositionOf
188 \ List.PositionOfAny List.Positions List.Product
189 \ List.Random List.Range List.RemoveFirstN
190 \ List.RemoveItems List.RemoveLastN List.RemoveMatchingItems
191 \ List.RemoveNulls List.RemoveRange List.Repeat
192 \ List.ReplaceMatchingItems List.ReplaceRange List.ReplaceValue
193 \ List.Reverse List.Select List.Single
194 \ List.SingleOrDefault List.Skip List.Sort
195 \ List.Split List.StandardDeviation List.Sum
196 \ List.Times List.Transform List.TransformMany
197 \ List.Union List.Zip Logical.From
198 \ Logical.FromText Logical.ToText Module.Versions
199 \ MySQL.Database Number.Abs Number.Acos
200 \ Number.Asin Number.Atan Number.Atan2
201 \ Number.BitwiseAnd Number.BitwiseNot Number.BitwiseOr
202 \ Number.BitwiseShiftLeft Number.BitwiseShiftRight Number.BitwiseXor
203 \ Number.Combinations Number.Cos Number.Cosh
204 \ Number.Exp Number.Factorial Number.From
205 \ Number.FromText Number.IntegerDivide Number.IsEven
206 \ Number.IsNaN Number.IsOdd Number.Ln
207 \ Number.Log Number.Log10 Number.Mod
208 \ Number.Permutations Number.Power Number.Random
209 \ Number.RandomBetween Number.Round Number.RoundAwayFromZero
210 \ Number.RoundDown Number.RoundTowardZero Number.RoundUp
211 \ Number.Sign Number.Sin Number.Sinh
212 \ Number.Sqrt Number.Tan Number.Tanh
213 \ Number.ToText Number.Type OData.Feed Odbc.DataSource
214 \ Odbc.InferOptions Odbc.Query OleDb.DataSource
215 \ OleDb.Query Oracle.Database Pdf.Tables
216 \ Percentage.From Percentage.Type PostgreSQL.Database Progress.DataSourceProgress
217 \ RData.FromBinary Record.AddField Record.Combine
218 \ Record.Field Record.FieldCount Record.FieldNames
219 \ Record.FieldOrDefault Record.FieldValues Record.FromList
220 \ Record.FromTable Record.HasFields Record.RemoveFields
221 \ Record.RenameFields Record.ReorderFields Record.SelectFields
222 \ Record.ToList Record.ToTable Record.TransformFields Record.Type
223 \ Replacer.ReplaceText Replacer.ReplaceValue RowExpression.Column
224 \ RowExpression.From RowExpression.Row Salesforce.Data
225 \ Salesforce.Reports SapBusinessWarehouse.Cubes SapHana.Database
226 \ SharePoint.Contents SharePoint.Files SharePoint.Tables
227 \ Single.From Single.Type Soda.Feed Splitter.SplitByNothing
228 \ Splitter.SplitTextByAnyDelimiter Splitter.SplitTextByCharacterTransition Splitter.SplitTextByDelimiter
229 \ Splitter.SplitTextByEachDelimiter Splitter.SplitTextByLengths Splitter.SplitTextByPositions
230 \ Splitter.SplitTextByRanges Splitter.SplitTextByRepeatedLengths Splitter.SplitTextByWhitespace
231 \ Sql.Database Sql.Databases SqlExpression.SchemaFrom
232 \ SqlExpression.ToExpression Sybase.Database Table.AddColumn
233 \ Table.AddFuzzyClusterColumn Table.AddIndexColumn Table.AddJoinColumn
234 \ Table.AddKey Table.AddRankColumn Table.AggregateTableColumn
235 \ Table.AlternateRows Table.ApproximateRowCount Table.Buffer
236 \ Table.Column Table.ColumnCount Table.ColumnNames
237 \ Table.ColumnsOfType Table.Combine Table.CombineColumns
238 \ Table.CombineColumnsToRecord Table.ConformToPageReader Table.Contains
239 \ Table.ContainsAll Table.ContainsAny Table.DemoteHeaders
240 \ Table.Distinct Table.DuplicateColumn Table.ExpandListColumn
241 \ Table.ExpandRecordColumn Table.ExpandTableColumn Table.FillDown
242 \ Table.FillUp Table.FilterWithDataTable Table.FindText
243 \ Table.First Table.FirstN Table.FirstValue
244 \ Table.FromColumns Table.FromList Table.FromPartitions
245 \ Table.FromRecords Table.FromRows Table.FromValue
246 \ Table.FuzzyGroup Table.FuzzyJoin Table.FuzzyNestedJoin
247 \ Table.Group Table.HasColumns Table.InsertRows
248 \ Table.IsDistinct Table.IsEmpty Table.Join
249 \ Table.Keys Table.Last Table.LastN
250 \ Table.MatchesAllRows Table.MatchesAnyRows Table.Max
251 \ Table.MaxN Table.Min Table.MinN
252 \ Table.NestedJoin Table.Partition Table.PartitionValues
253 \ Table.PartitionValues Table.Pivot Table.PositionOf
254 \ Table.PositionOfAny Table.PrefixColumns Table.Profile
255 \ Table.PromoteHeaders Table.Range Table.RemoveColumns
256 \ Table.RemoveFirstN Table.RemoveLastN Table.RemoveMatchingRows
257 \ Table.RemoveRows Table.RemoveRowsWithErrors Table.RenameColumns
258 \ Table.ReorderColumns Table.Repeat Table.ReplaceErrorValues
259 \ Table.ReplaceKeys Table.ReplaceMatchingRows Table.ReplaceRelationshipIdentity
260 \ Table.ReplaceRows Table.ReplaceValue Table.ReverseRows
261 \ Table.RowCount Table.Schema Table.SelectColumns
262 \ Table.SelectRows Table.SelectRowsWithErrors Table.SingleRow
263 \ Table.Skip Table.Sort Table.Split
264 \ Table.SplitAt Table.SplitColumn Table.StopFolding
265 \ Table.ToColumns Table.ToList Table.ToRecords
266 \ Table.ToRows Table.TransformColumnNames Table.TransformColumnTypes
267 \ Table.TransformColumns Table.TransformRows Table.Transpose
268 \ Table.Unpivot Table.UnpivotOtherColumns Table.View
269 \ Table.ViewError Table.ViewFunction Table.WithErrorContext
270 \ Tables.GetRelationships Teradata.Database Text.AfterDelimiter
271 \ Text.At Text.BeforeDelimiter Text.BetweenDelimiters
272 \ Text.Clean Text.Combine Text.Contains
273 \ Text.End Text.EndsWith Text.From
274 \ Text.FromBinary Text.InferNumberType Text.Insert
275 \ Text.Length Text.Lower Text.Middle
276 \ Text.NewGuid Text.PadEnd Text.PadStart
277 \ Text.PositionOf Text.PositionOfAny Text.Proper
278 \ Text.Range Text.Remove Text.RemoveRange
279 \ Text.Repeat Text.Replace Text.ReplaceRange
280 \ Text.Reverse Text.Select Text.Split
281 \ Text.SplitAny Text.Start Text.StartsWith
282 \ Text.ToBinary Text.ToList Text.Trim
283 \ Text.TrimEnd Text.TrimStart Text.Upper
284 \ Time.EndOfHour Time.From Time.FromText
285 \ Time.Hour Time.Minute Time.Second
286 \ Time.StartOfHour Time.ToRecord Time.ToText
287 \ Type.AddTableKey Type.ClosedRecord Type.Facets
288 \ Type.ForFunction Type.ForRecord Type.FunctionParameters
289 \ Type.FunctionRequiredParameters Type.FunctionReturn Type.Is
290 \ Type.IsNullable Type.IsOpenRecord Type.ListItem
291 \ Type.NonNullable Type.OpenRecord Type.RecordFields
292 \ Type.ReplaceFacets Type.ReplaceTableKeys Type.TableColumn
293 \ Type.TableKeys Type.TableRow Type.TableSchema
294 \ Type.Union Uri.BuildQueryString Uri.Combine
295 \ Uri.EscapeDataString Uri.Parts Value.Add
296 \ Value.Alternates Value.As Value.Compare
297 \ Value.Divide Value.Equals Value.Expression
298 \ Value.Firewall Value.FromText Value.Is
299 \ Value.Lineage Value.Metadata Value.Multiply
300 \ Value.NativeQuery Value.NullableEquals Value.Optimize
301 \ Value.RemoveMetadata Value.ReplaceMetadata Value.ReplaceType
302 \ Value.Subtract Value.Traits Value.Type
303 \ Value.VersionIdentity Value.Versions Value.ViewError
304 \ Value.ViewFunction Variable.Value Web.BrowserContents
305 \ Web.Contents Web.Headers Web.Page
306 \ WebAction.Request Xml.Document Xml.Tables
307
308
309" Fold on let/in
310" syn region pqLetFold start="\<let\>\c" end="\<in\>\c" transparent fold
311
312" Define highlighting
313hi def link pqComment Comment
314hi def link pqNumber Number
315hi def link pqFloat Float
316hi def link pqString String
317hi def link pqKeyword Keyword
318hi def link pqOperator Operator
319hi def link pqFunction Delimiter
320hi def link pqTable Number
321hi def link pqRecord Statement
322hi def link pqList Delimiter
323hi def link pqParen Delimiter
324hi def link pqTodo Todo
325hi def link pqConditional Conditional
326hi def link pqNull Const
327hi def link pqType Type
328hi def link pqIdentifier Number
329hi def link pqConstant Constant
330hi def link pqLetFold Constant
331
332let b:current_syntax = "pq"
333
334let &cpo = s:keepcpo
335unlet! s:keepcpo
336
337" vim: ts=8