Commit: patch 9.1.1271: filetype: Power Query files are not recognized

2 views
Skip to first unread message

Christian Brabandt

unread,
Apr 3, 2025, 3:15:13 PM4/3/25
to vim...@googlegroups.com
patch 9.1.1271: filetype: Power Query files are not recognized

Commit: https://github.com/vim/vim/commit/e74ec3f523a152f62a37cc3ab476f0e5a2e812c6
Author: Anarion Dunedain <anar...@gmail.com>
Date: Thu Apr 3 21:08:25 2025 +0200

patch 9.1.1271: filetype: Power Query files are not recognized

Problem: filetype: Power Query files are not recognized
Solution: detect '*.pq' as pq filetype, include pq syntax and filetype
plugin (Anarion Dunedain)

Microsoft Power Query provides a powerful data import experience that
encompasses many features. Power Query works with desktop Analysis
Services, Excel, and Power BI workbooks, in addition to many online
services, such as Fabric, Power BI service, Power Apps, Microsoft 365
Customer Insights, and more. A core capability of Power Query is to
filter and combine, that is, to mash-up data from one or more of a rich
collection of supported data sources. Any such data mashup is expressed
using the Power Query M formula language. The M language is a
functional, case sensitive language similar to F#.

Reference:
- Power Query M formula language overview:
https://learn.microsoft.com/en-us/powerquery-m/

closes: #17045

Signed-off-by: Anarion Dunedain <anar...@gmail.com>
Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS
index f233b3936..180b9e991 100644
--- a/.github/MAINTAINERS
+++ b/.github/MAINTAINERS
@@ -255,6 +255,7 @@ runtime/ftplugin/plsql.vim @lee-lindley
runtime/ftplugin/pod.vim @petdance @dkearns
runtime/ftplugin/poefilter.vim @ObserverOfTime
runtime/ftplugin/postscr.vim @mrdubya
+runtime/ftplugin/pq.vim @anarion80
runtime/ftplugin/prisma.vim @ribru17
runtime/ftplugin/proto.vim @Limero
runtime/ftplugin/ps1.vim @heaths
@@ -580,6 +581,7 @@ runtime/syntax/plsql.vim @lee-lindley
runtime/syntax/pod.vim @petdance
runtime/syntax/poefilter.vim @ObserverOfTime
runtime/syntax/postscr.vim @mrdubya
+runtime/syntax/pq.vim @anarion80
runtime/syntax/privoxy.vim @dkearns
runtime/syntax/progress.vim @rdnlsmith
runtime/syntax/prolog.vim @XVilka
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index e767305a3..59e6a810b 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -1967,6 +1967,9 @@ au BufNewFile,BufRead *.ps1,*.psd1,*.psm1,*.pssc setf ps1
au BufNewFile,BufRead *.ps1xml setf ps1xml
au BufNewFile,BufRead *.cdxml,*.psc1 setf xml

+" Power Query M
+au BufNewFile,BufRead *.pq setf pq
+
" Printcap and Termcap
au BufNewFile,BufRead *printcap
\ let b:ptcap_type = "print" | setf ptcap
diff --git a/runtime/ftplugin/pq.vim b/runtime/ftplugin/pq.vim
new file mode 100644
index 000000000..2ed2fa423
--- /dev/null
+++ b/runtime/ftplugin/pq.vim
@@ -0,0 +1,16 @@
+" Vim filetype plugin
+" Language: Power Query M
+" Maintainer: Anarion Dunedain <anar...@gmail.com>
+" Last Change: 2025 Apr 3
+
+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/syntax/pq.vim b/runtime/syntax/pq.vim
new file mode 100644
index 000000000..5778dbca4
--- /dev/null
+++ b/runtime/syntax/pq.vim
@@ -0,0 +1,337 @@
+" Vim syntax file
+" Language: Power Query M
+" Maintainer: Anarion Dunedain <anar...@gmail.com>
+" Last Change:
+" 2025 Apr 03 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 Power Query functions with dot or hash in the name
+setlocal iskeyword+=.
+setlocal iskeyword+=#
+
+setlocal foldmethod=syntax
+setlocal foldtext=getline(v:foldstart)
+
+" DAX is case sensitive
+syn case match
+
+" Any Power Query identifier
+syn match pqIdentifier "\<[a-zA-Z0-9$_#]*\>"
+
+" Fold on parenthesis
+syn region pqParenthesisFold start="(" end=")" transparent fold
+
+" Power Query keywords
+syn keyword pqKeyword section sections shared
+syn region pqKeyword start="\<let\>
Reply all
Reply to author
Forward
0 new messages