diff options
Diffstat (limited to 'mnv/runtime/compiler/powershell.mnv')
| -rw-r--r-- | mnv/runtime/compiler/powershell.mnv | 89 |
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: |
