From 2d9ac06785eafe61475fd646febae95878eff961 Mon Sep 17 00:00:00 2001 From: Alec Thomas Date: Sat, 7 Dec 2019 18:59:03 -0800 Subject: [PATCH] Fix PowerShell error on drive letters. Fixes #312. --- lexers/p/powershell.go | 4 +++- lexers/testdata/powershell.actual | 1 + lexers/testdata/powershell.expected | 22 ++++++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 lexers/testdata/powershell.actual create mode 100644 lexers/testdata/powershell.expected diff --git a/lexers/p/powershell.go b/lexers/p/powershell.go index cee366e8a..10eba4f95 100644 --- a/lexers/p/powershell.go +++ b/lexers/p/powershell.go @@ -22,6 +22,7 @@ var Powershell = internal.Register(MustNewLexer( {`^(\s*#[#\s]*)(\.(?:component|description|example|externalhelp|forwardhelpcategory|forwardhelptargetname|functionality|inputs|link|notes|outputs|parameter|remotehelprunspace|role|synopsis))([^\n]*$)`, ByGroups(Comment, LiteralStringDoc, Comment), nil}, {`#[^\n]*?$`, Comment, nil}, {`(<|<)#`, CommentMultiline, Push("multline")}, + {`(?i)([A-Z]:)`, Name, nil}, {`@"\n`, LiteralStringHeredoc, Push("heredoc-double")}, {`@'\n.*?\n'@`, LiteralStringHeredoc, nil}, {"`[\\'\"$@-]", Punctuation, nil}, @@ -30,7 +31,8 @@ var Powershell = internal.Register(MustNewLexer( {`(\$|@@|@)((global|script|private|env):)?\w+`, NameVariable, nil}, {`(while|validateset|validaterange|validatepattern|validatelength|validatecount|until|trap|switch|return|ref|process|param|parameter|in|if|global:|function|foreach|for|finally|filter|end|elseif|else|dynamicparam|do|default|continue|cmdletbinding|break|begin|alias|\?|%|#script|#private|#local|#global|mandatory|parametersetname|position|valuefrompipeline|valuefrompipelinebypropertyname|valuefromremainingarguments|helpmessage|try|catch|throw)\b`, Keyword, nil}, {`-(and|as|band|bnot|bor|bxor|casesensitive|ccontains|ceq|cge|cgt|cle|clike|clt|cmatch|cne|cnotcontains|cnotlike|cnotmatch|contains|creplace|eq|exact|f|file|ge|gt|icontains|ieq|ige|igt|ile|ilike|ilt|imatch|ine|inotcontains|inotlike|inotmatch|ireplace|is|isnot|le|like|lt|match|ne|not|notcontains|notlike|notmatch|or|regex|replace|wildcard)\b`, Operator, nil}, - {`(write|where|wait|use|update|unregister|undo|trace|test|tee|take|suspend|stop|start|split|sort|skip|show|set|send|select|scroll|resume|restore|restart|resolve|resize|reset|rename|remove|register|receive|read|push|pop|ping|out|new|move|measure|limit|join|invoke|import|group|get|format|foreach|export|expand|exit|enter|enable|disconnect|disable|debug|cxnew|copy|convertto|convertfrom|convert|connect|complete|compare|clear|checkpoint|aggregate|add)-[a-z_]\w*\b`, NameBuiltin, nil}, + {`(write|where|watch|wait|use|update|unregister|unpublish|unprotect|unlock|uninstall|undo|unblock|trace|test|tee|take|sync|switch|suspend|submit|stop|step|start|split|sort|skip|show|set|send|select|search|scroll|save|revoke|resume|restore|restart|resolve|resize|reset|request|repair|rename|remove|register|redo|receive|read|push|publish|protect|pop|ping|out|optimize|open|new|move|mount|merge|measure|lock|limit|join|invoke|install|initialize|import|hide|group|grant|get|format|foreach|find|export|expand|exit|enter|enable|edit|dismount|disconnect|disable|deny|debug|cxnew|copy|convertto|convertfrom|convert|connect|confirm|compress|complete|compare|close|clear|checkpoint|block|backup|assert|approve|aggregate|add)-[a-z_]\w*\b`, NameBuiltin, nil}, + {`(ac|asnp|cat|cd|cfs|chdir|clc|clear|clhy|cli|clp|cls|clv|cnsn|compare|copy|cp|cpi|cpp|curl|cvpa|dbp|del|diff|dir|dnsn|ebp|echo|epal|epcsv|epsn|erase|etsn|exsn|fc|fhx|fl|foreach|ft|fw|gal|gbp|gc|gci|gcm|gcs|gdr|ghy|gi|gjb|gl|gm|gmo|gp|gps|gpv|group|gsn|gsnp|gsv|gu|gv|gwmi|h|history|icm|iex|ihy|ii|ipal|ipcsv|ipmo|ipsn|irm|ise|iwmi|iwr|kill|lp|ls|man|md|measure|mi|mount|move|mp|mv|nal|ndr|ni|nmo|npssc|nsn|nv|ogv|oh|popd|ps|pushd|pwd|r|rbp|rcjb|rcsn|rd|rdr|ren|ri|rjb|rm|rmdir|rmo|rni|rnp|rp|rsn|rsnp|rujb|rv|rvpa|rwmi|sajb|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spjb|spps|spsv|start|sujb|sv|swmi|tee|trcm|type|wget|where|wjb|write)\s`, NameBuiltin, nil}, {"\\[[a-z_\\[][\\w. `,\\[\\]]*\\]", NameConstant, nil}, {`-[a-z_]\w*`, Name, nil}, {`\w+`, Name, nil}, diff --git a/lexers/testdata/powershell.actual b/lexers/testdata/powershell.actual new file mode 100644 index 000000000..6e7a5e209 --- /dev/null +++ b/lexers/testdata/powershell.actual @@ -0,0 +1 @@ +Get-ChildItem -Recurse -Force -ErrorAction SilentlyContinue -Name -Path C:\ *.txt diff --git a/lexers/testdata/powershell.expected b/lexers/testdata/powershell.expected new file mode 100644 index 000000000..0c6f29669 --- /dev/null +++ b/lexers/testdata/powershell.expected @@ -0,0 +1,22 @@ +[ + {"type":"NameBuiltin","value":"Get-ChildItem"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"-Recurse"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"-Force"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"-ErrorAction"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"SilentlyContinue"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"-Name"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"-Path"}, + {"type":"Text","value":" "}, + {"type":"Name","value":"C:"}, + {"type":"Punctuation","value":"\\"}, + {"type":"Text","value":" "}, + {"type":"Punctuation","value":"*."}, + {"type":"Name","value":"txt"}, + {"type":"Text","value":"\n"} +]