summaryrefslogtreecommitdiff
path: root/mnv/runtime/compiler/powershell.mnv
diff options
context:
space:
mode:
Diffstat (limited to 'mnv/runtime/compiler/powershell.mnv')
-rw-r--r--mnv/runtime/compiler/powershell.mnv89
1 files changed, 89 insertions, 0 deletions
diff --git a/mnv/runtime/compiler/powershell.mnv b/mnv/runtime/compiler/powershell.mnv
new file mode 100644
index 0000000000..39c75373b6
--- /dev/null
+++ b/mnv/runtime/compiler/powershell.mnv
@@ -0,0 +1,89 @@
+" MNV compiler file
+" Compiler: powershell
+" URL: https://github.com/PProvost/mnv-ps1
+" Contributors: Enno Nagel
+" Last Change: 2024 Mar 29
+" 2024 Apr 03 by the MNV Project (removed :CompilerSet definition)
+" 2024 Apr 05 by the MNV Project (avoid leaving behind g:makeprg)
+" 2024 Nov 19 by the MNV Project (properly escape makeprg setting)
+" 2025 Mar 11 by the MNV Project (add comment for Dispatch)
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "powershell"
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+if !exists("g:ps1_makeprg_cmd")
+ if executable('pwsh')
+ " pwsh is the future
+ let g:ps1_makeprg_cmd = 'pwsh'
+ elseif executable('pwsh.exe')
+ let g:ps1_makeprg_cmd = 'pwsh.exe'
+ elseif executable('powershell.exe')
+ let g:ps1_makeprg_cmd = 'powershell.exe'
+ else
+ let g:ps1_makeprg_cmd = ''
+ endif
+endif
+
+if !executable(g:ps1_makeprg_cmd)
+ echoerr "To use the powershell compiler, please set g:ps1_makeprg_cmd to the powershell executable!"
+endif
+
+" Show CategoryInfo, FullyQualifiedErrorId, etc?
+let g:ps1_efm_show_error_categories = get(g:, 'ps1_efm_show_error_categories', 0)
+
+" Use absolute path because powershell requires explicit relative paths
+" (./file.ps1 is okay, but # expands to file.ps1)
+let s:makeprg = g:ps1_makeprg_cmd .. ' %:p:S'
+
+" Parse file, line, char from callstacks:
+" Write-Ouput : The term 'Write-Ouput' is not recognized as the name of a
+" cmdlet, function, script file, or operable program. Check the spelling
+" of the name, or if a path was included, verify that the path is correct
+" and try again.
+" At C:\script.ps1:11 char:5
+" + Write-Ouput $content
+" + ~~~~~~~~~~~
+" + CategoryInfo : ObjectNotFound: (Write-Ouput:String) [], CommandNotFoundException
+" + FullyQualifiedErrorId : CommandNotFoundException
+
+" CompilerSet makeprg=pwsh
+" CompilerSet makeprg=powershell
+execute 'CompilerSet makeprg=' .. escape(s:makeprg, ' \|"')
+
+" Showing error in context with underlining.
+CompilerSet errorformat=%+G+%m
+" Error summary.
+CompilerSet errorformat+=%E%*\\S\ :\ %m
+" Error location.
+CompilerSet errorformat+=%CAt\ %f:%l\ char:%c
+" Errors that span multiple lines (may be wrapped to width of terminal).
+CompilerSet errorformat+=%C%m
+" Ignore blank/whitespace-only lines.
+CompilerSet errorformat+=%Z\\s%#
+
+if g:ps1_efm_show_error_categories
+ CompilerSet errorformat^=%+G\ \ \ \ +\ %.%#\\s%#:\ %m
+else
+ CompilerSet errorformat^=%-G\ \ \ \ +\ %.%#\\s%#:\ %m
+endif
+
+
+" Parse file, line, char from of parse errors:
+" At C:\script.ps1:22 char:16
+" + Stop-Process -Name "invalidprocess
+" + ~~~~~~~~~~~~~~~
+" The string is missing the terminator: ".
+" + CategoryInfo : ParserError: (:) [], ParseException
+" + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
+CompilerSet errorformat+=At\ %f:%l\ char:%c
+
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" mnv:set sw=2 sts=2: