|
4 | 4 | "If you want to provide a fix or improvement, please create a pull request against the original repository.", |
5 | 5 | "Once accepted there, we are happy to receive an update request." |
6 | 6 | ], |
7 | | - "version": "https://github.com/mmims/language-batchfile/commit/9b2d868a43d6a04a4dc27cb31f907b960a4fdab1", |
| 7 | + "version": "https://github.com/mmims/language-batchfile/commit/6235c491be4dff49cd3966b50142874d7f79580a", |
8 | 8 | "name": "Batch File", |
9 | 9 | "scopeName": "source.batchfile", |
10 | 10 | "patterns": [ |
|
46 | 46 | "commands": { |
47 | 47 | "patterns": [ |
48 | 48 | { |
49 | | - "match": "(?<=^|[\\s@])(?i:adprep|append|arp|assoc|at|atmadm|attrib|auditpol|autochk|autoconv|autofmt|bcdboot|bcdedit|bdehdcfg|bitsadmin|bootcfg|brea|cacls|cd|certreq|certutil|change|chcp|chdir|chglogon|chgport|chgusr|chkdsk|chkntfs|choice|cipher|clip|clscluadmin|cluster|cmd|cmdkey|cmstp|color|comp|compact|convert|copy|cprofile|cscript|csvde|date|dcdiag|dcgpofix|dcpromo|defra|del|dfscmd|dfsdiag|dfsrmig|diantz|dir|dirquota|diskcomp|diskcopy|diskpart|diskperf|diskraid|diskshadow|dispdiag|doin|dnscmd|doskey|driverquery|dsacls|dsadd|dsamain|dsdbutil|dsget|dsmgmt|dsmod|dsmove|dsquery|dsrm|edit|endlocal|eraseesentutl|eventcreate|eventquery|eventtriggers|evntcmd|expand|extract|fc|filescrn|find|findstr|finger|flattemp|fonde|forfiles|format|freedisk|fsutil|ftp|ftype|fveupdate|getmac|gettype|gpfixup|gpresult|gpupdate|graftabl|hashgen|hep|helpctr|hostname|icacls|iisreset|inuse|ipconfig|ipxroute|irftp|ismserv|jetpack|klist|ksetup|ktmutil|ktpass|label|ldifd|ldp|lodctr|logman|logoff|lpq|lpr|macfile|makecab|manage-bde|mapadmin|md|mkdir|mklink|mmc|mode|more|mount|mountvol|move|mqbup|mqsvc|mqtgsvc|msdt|msg|msiexec|msinfo32|mstsc|nbtstat|net computer|net group|net localgroup|net print|net session|net share|net start|net stop|net use|net user|net view|net|netcfg|netdiag|netdom|netsh|netstat|nfsadmin|nfsshare|nfsstat|nlb|nlbmgr|nltest|nslookup|ntackup|ntcmdprompt|ntdsutil|ntfrsutl|openfiles|pagefileconfig|path|pathping|pause|pbadmin|pentnt|perfmon|ping|pnpunatten|pnputil|popd|powercfg|powershell|powershell_ise|print|prncnfg|prndrvr|prnjobs|prnmngr|prnport|prnqctl|prompt|pubprn|pushd|pushprinterconnections|pwlauncher|qappsrv|qprocess|query|quser|qwinsta|rasdial|rcp|rd|rdpsign|regentc|recover|redircmp|redirusr|reg|regini|regsvr32|relog|ren|rename|rendom|repadmin|repair-bde|replace|reset session|rxec|risetup|rmdir|robocopy|route|rpcinfo|rpcping|rsh|runas|rundll32|rwinsta|sc|schtasks|scwcmd|secedit|serverceipoptin|servrmanagercmd|serverweroptin|setlocal|setspn|setx|sfc|shadow|shift|showmount|shutdown|sort|start|storrept|subst|sxstrace|ysocmgr|systeminfo|takeown|tapicfg|taskkill|tasklist|tcmsetup|telnet|tftp|time|timeout|title|tlntadmn|tpmvscmgr|tpmvscmgr|tacerpt|tracert|tree|tscon|tsdiscon|tsecimp|tskill|tsprof|type|typeperf|tzutil|uddiconfig|umount|unlodctr|ver|verifier|verif|vol|vssadmin|w32tm|waitfor|wbadmin|wdsutil|wecutil|wevtutil|where|whoami|winnt|winnt32|winpop|winrm|winrs|winsat|wlbs|mic|wscript|xcopy)(?=$|\\s)", |
| 49 | + "match": "(?<=^|[\\s@])(?i:adprep|append|arp|assoc|at|atmadm|attrib|auditpol|autochk|autoconv|autofmt|bcdboot|bcdedit|bdehdcfg|bitsadmin|bootcfg|brea|cacls|cd|certreq|certutil|change|chcp|chdir|chglogon|chgport|chgusr|chkdsk|chkntfs|choice|cipher|clip|cls|clscluadmin|cluster|cmd|cmdkey|cmstp|color|comp|compact|convert|copy|cprofile|cscript|csvde|date|dcdiag|dcgpofix|dcpromo|defra|del|dfscmd|dfsdiag|dfsrmig|diantz|dir|dirquota|diskcomp|diskcopy|diskpart|diskperf|diskraid|diskshadow|dispdiag|doin|dnscmd|doskey|driverquery|dsacls|dsadd|dsamain|dsdbutil|dsget|dsmgmt|dsmod|dsmove|dsquery|dsrm|edit|endlocal|eraseesentutl|eventcreate|eventquery|eventtriggers|evntcmd|expand|extract|fc|filescrn|find|findstr|finger|flattemp|fonde|forfiles|format|freedisk|fsutil|ftp|ftype|fveupdate|getmac|gettype|gpfixup|gpresult|gpupdate|graftabl|hashgen|hep|helpctr|hostname|icacls|iisreset|inuse|ipconfig|ipxroute|irftp|ismserv|jetpack|klist|ksetup|ktmutil|ktpass|label|ldifd|ldp|lodctr|logman|logoff|lpq|lpr|macfile|makecab|manage-bde|mapadmin|md|mkdir|mklink|mmc|mode|more|mount|mountvol|move|mqbup|mqsvc|mqtgsvc|msdt|msg|msiexec|msinfo32|mstsc|nbtstat|net computer|net group|net localgroup|net print|net session|net share|net start|net stop|net use|net user|net view|net|netcfg|netdiag|netdom|netsh|netstat|nfsadmin|nfsshare|nfsstat|nlb|nlbmgr|nltest|nslookup|ntackup|ntcmdprompt|ntdsutil|ntfrsutl|openfiles|pagefileconfig|path|pathping|pause|pbadmin|pentnt|perfmon|ping|pnpunatten|pnputil|popd|powercfg|powershell|powershell_ise|print|prncnfg|prndrvr|prnjobs|prnmngr|prnport|prnqctl|prompt|pubprn|pushd|pushprinterconnections|pwlauncher|qappsrv|qprocess|query|quser|qwinsta|rasdial|rcp|rd|rdpsign|regentc|recover|redircmp|redirusr|reg|regini|regsvr32|relog|ren|rename|rendom|repadmin|repair-bde|replace|reset session|rxec|risetup|rmdir|robocopy|route|rpcinfo|rpcping|rsh|runas|rundll32|rwinsta|sc|schtasks|scwcmd|secedit|serverceipoptin|servrmanagercmd|serverweroptin|setspn|setx|sfc|shadow|shift|showmount|shutdown|sort|start|storrept|subst|sxstrace|ysocmgr|systeminfo|takeown|tapicfg|taskkill|tasklist|tcmsetup|telnet|tftp|time|timeout|title|tlntadmn|tpmvscmgr|tpmvscmgr|tacerpt|tracert|tree|tscon|tsdiscon|tsecimp|tskill|tsprof|type|typeperf|tzutil|uddiconfig|umount|unlodctr|ver|verifier|verif|vol|vssadmin|w32tm|waitfor|wbadmin|wdsutil|wecutil|wevtutil|where|whoami|winnt|winnt32|winpop|winrm|winrs|winsat|wlbs|mic|wscript|xcopy)(?=$|\\s)", |
50 | 50 | "name": "keyword.command.batchfile" |
51 | 51 | }, |
52 | 52 | { |
53 | | - "begin": "(?<=^|[\\s@])(?i:echo)(?=$|\\s|\\.)", |
| 53 | + "begin": "(?i)(?<=^|[\\s@])(echo)(?:(?=$|\\.|:)|\\s+(?:(on|off)(?=\\s*$))?)", |
54 | 54 | "beginCaptures": { |
55 | | - "0": { |
| 55 | + "1": { |
56 | 56 | "name": "keyword.command.batchfile" |
| 57 | + }, |
| 58 | + "2": { |
| 59 | + "name": "keyword.other.special-method.batchfile" |
57 | 60 | } |
58 | 61 | }, |
59 | 62 | "end": "(?=$\\n|[&|><)])", |
|
72 | 75 | } |
73 | 76 | ] |
74 | 77 | }, |
| 78 | + { |
| 79 | + "match": "(?i)(?<=^|[\\s@])(setlocal)(?:\\s*$|\\s+(EnableExtensions|DisableExtensions|EnableDelayedExpansion|DisableDelayedExpansion)(?=\\s*$))", |
| 80 | + "captures": { |
| 81 | + "1": { |
| 82 | + "name": "keyword.command.batchfile" |
| 83 | + }, |
| 84 | + "2": { |
| 85 | + "name": "keyword.other.special-method.batchfile" |
| 86 | + } |
| 87 | + } |
| 88 | + }, |
75 | 89 | { |
76 | 90 | "include": "#command_set" |
77 | 91 | } |
|
110 | 124 | "include": "#parens" |
111 | 125 | }, |
112 | 126 | { |
113 | | - "begin": "(\")\\s*([^ ][^=]*)(=)", |
114 | | - "beginCaptures": { |
115 | | - "1": { |
116 | | - "name": "punctuation.definition.string.begin.batchfile" |
117 | | - }, |
118 | | - "2": { |
119 | | - "name": "variable.other.readwrite.batchfile" |
120 | | - }, |
121 | | - "3": { |
122 | | - "name": "keyword.operator.assignment.batchfile" |
123 | | - } |
124 | | - }, |
125 | | - "end": "\"", |
126 | | - "endCaptures": { |
127 | | - "0": { |
128 | | - "name": "punctuation.definition.string.end.batchfile" |
129 | | - } |
130 | | - }, |
131 | | - "name": "string.quoted.double.batchfile", |
132 | | - "patterns": [ |
133 | | - { |
134 | | - "include": "#variables" |
135 | | - }, |
136 | | - { |
137 | | - "include": "#numbers" |
138 | | - }, |
139 | | - { |
140 | | - "include": "#parens" |
141 | | - } |
142 | | - ] |
| 127 | + "include": "#command_set_strings" |
143 | 128 | }, |
144 | 129 | { |
145 | 130 | "include": "#strings" |
|
216 | 201 | "begin": "\\s+/[pP]\\s+", |
217 | 202 | "end": "(?=$\\n|[&|><)])", |
218 | 203 | "patterns": [ |
| 204 | + { |
| 205 | + "include": "#command_set_strings" |
| 206 | + }, |
219 | 207 | { |
220 | 208 | "begin": "([^ ][^=]*)(=)", |
221 | 209 | "beginCaptures": { |
|
295 | 283 | } |
296 | 284 | ] |
297 | 285 | }, |
| 286 | + "command_set_strings": { |
| 287 | + "patterns": [ |
| 288 | + { |
| 289 | + "begin": "(\")\\s*([^ ][^=]*)(=)", |
| 290 | + "beginCaptures": { |
| 291 | + "1": { |
| 292 | + "name": "punctuation.definition.string.begin.batchfile" |
| 293 | + }, |
| 294 | + "2": { |
| 295 | + "name": "variable.other.readwrite.batchfile" |
| 296 | + }, |
| 297 | + "3": { |
| 298 | + "name": "keyword.operator.assignment.batchfile" |
| 299 | + } |
| 300 | + }, |
| 301 | + "end": "\"", |
| 302 | + "endCaptures": { |
| 303 | + "0": { |
| 304 | + "name": "punctuation.definition.string.end.batchfile" |
| 305 | + } |
| 306 | + }, |
| 307 | + "name": "string.quoted.double.batchfile", |
| 308 | + "patterns": [ |
| 309 | + { |
| 310 | + "include": "#variables" |
| 311 | + }, |
| 312 | + { |
| 313 | + "include": "#numbers" |
| 314 | + }, |
| 315 | + { |
| 316 | + "include": "#escaped_characters" |
| 317 | + } |
| 318 | + ] |
| 319 | + } |
| 320 | + ] |
| 321 | + }, |
298 | 322 | "comments": { |
299 | 323 | "patterns": [ |
300 | 324 | { |
|
360 | 384 | "controls": { |
361 | 385 | "patterns": [ |
362 | 386 | { |
363 | | - "match": "(?<=^|\\s)(?i)(?:goto|call|exit)(?=$|\\s)", |
| 387 | + "match": "(?i)(?<=^|\\s)(?:call|exit(?=$|\\s)|goto(?=$|\\s|:))", |
364 | 388 | "name": "keyword.control.statement.batchfile" |
365 | 389 | }, |
366 | 390 | { |
|
390 | 414 | "escaped_characters": { |
391 | 415 | "patterns": [ |
392 | 416 | { |
393 | | - "match": "%%|\\^\\^!|\\^.|\\^\\n", |
| 417 | + "match": "%%|\\^\\^!|\\^(?=.)|\\^\\n", |
394 | 418 | "name": "constant.character.escape.batchfile" |
395 | 419 | } |
396 | 420 | ] |
397 | 421 | }, |
398 | 422 | "labels": { |
399 | 423 | "patterns": [ |
400 | 424 | { |
401 | | - "match": "^\\s*(:)([^+=,;:\\s].*)$", |
| 425 | + "match": "(?i)(?:^\\s*|(?<=goto)\\s*)(:)([^+=,;:\\s].*)$", |
402 | 426 | "captures": { |
403 | 427 | "1": { |
404 | 428 | "name": "punctuation.separator.batchfile" |
|
433 | 457 | "name": "keyword.operator.logical.batchfile" |
434 | 458 | }, |
435 | 459 | { |
436 | | - "match": "&&?|\\|\\|", |
| 460 | + "match": "(?<!\\^)&&?|\\|\\|", |
437 | 461 | "name": "keyword.operator.conditional.batchfile" |
438 | 462 | }, |
439 | 463 | { |
440 | | - "match": "\\|", |
| 464 | + "match": "(?<!\\^)\\|", |
441 | 465 | "name": "keyword.operator.pipe.batchfile" |
442 | 466 | }, |
443 | 467 | { |
|
0 commit comments