Fix lint warnings, another round of formatting, one bug fix (parser.ts, parse switch helpers, : is needed for a switch path value and = is needed for a switch define value). Few more link warnings and code review feedback and suggestions left.

This commit is contained in:
Andreea Isac 2019-08-27 15:21:05 -07:00
Родитель 7e2a568b47
Коммит b256a6624b
16 изменённых файлов: 1300 добавлений и 1398 удалений

27
.vscode/launch.json поставляемый Normal file
Просмотреть файл

@ -0,0 +1,27 @@
// A launch configuration that compiles the extension and then opens it inside a new window
{
"version": "0.1.0",
"configurations": [
{
"name": "Launch Extension",
"type": "extensionHost",
"request": "launch",
"runtimeExecutable": "${execPath}",
"args": [
"--extensionDevelopmentPath=${workspaceFolder}"
],
"stopOnEntry": false,
"sourceMaps": true,
"outFiles": [
"${workspaceFolder}/dist/**/*.js"
],
"preLaunchTask": "mycompile",
},
{
"name": "Node Attach",
"type": "node",
"request": "attach",
"port": 5858
}
]
}

11
.vscode/settings.json поставляемый Normal file
Просмотреть файл

@ -0,0 +1,11 @@
// Place your settings in this file to overwrite default and user settings.
{
"files.exclude": {
"out": false // set this to true to hide the "out" folder with the compiled JS files
},
"search.exclude": {
"out": true // set this to false to include "out" folder in search results
},
"typescript.tsdk": "./node_modules/typescript/lib",
"editor.detectIndentation": false // we want to use the TS server from our node_modules folder to control its version
}

14
.vscode/tasks.json поставляемый Normal file
Просмотреть файл

@ -0,0 +1,14 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "mycompile",
"type": "npm",
"script": "mycompile",
"problemMatcher": [
"$tsc-watch"
],
"isBackground": true
}
]
}

543
package-lock.json сгенерированный
Просмотреть файл

@ -1,6 +1,6 @@
{
"name": "vscode-makefile-tools",
"version": "0.0.1",
"version": "0.1.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -31,9 +31,10 @@
"dev": true
},
"@types/node": {
"version": "10.14.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.7.tgz",
"integrity": "sha512-on4MmIDgHXiuJDELPk1NFaKVUxxCFr37tm8E9yN6rAiF5Pzp/9bBfBHkoexqRiY+hk/Z04EJU9kKEb59YqJ82A=="
"version": "10.14.16",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.16.tgz",
"integrity": "sha512-/opXIbfn0P+VLt+N8DE4l8Mn8rbhiJgabU96ZJ0p9mxOkIks5gh6RUnpHak7Yh0SFkyjO/ODbxsQQPV2bpMmyA==",
"dev": true
},
"agent-base": {
"version": "4.3.0",
@ -45,9 +46,9 @@
}
},
"ajv": {
"version": "6.10.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
"integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
"version": "6.10.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
"integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
"dev": true,
"requires": {
"fast-deep-equal": "^2.0.1",
@ -60,6 +61,7 @@
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
@ -68,6 +70,7 @@
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
"sprintf-js": "~1.0.2"
}
@ -105,21 +108,11 @@
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
"dev": true
},
"azure-devops-node-api": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-7.2.0.tgz",
"integrity": "sha512-pMfGJ6gAQ7LRKTHgiRF+8iaUUeGAI0c8puLaqHLc7B8AR7W6GJLozK9RFeUHFjEGybC9/EB3r67WPd7e46zQ8w==",
"requires": {
"os": "0.1.1",
"tunnel": "0.0.4",
"typed-rest-client": "1.2.0",
"underscore": "1.8.3"
}
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"bcrypt-pbkdf": {
"version": "1.0.2",
@ -130,31 +123,22 @@
"tweetnacl": "^0.14.3"
}
},
"boolbase": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"browser-stdout": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
"integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
"buffer-crc32": {
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
"integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
},
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
@ -177,29 +161,18 @@
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
}
},
"cheerio": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz",
"integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==",
"requires": {
"css-select": "~1.2.0",
"dom-serializer": "~0.1.1",
"entities": "~1.1.1",
"htmlparser2": "^3.9.1",
"lodash": "^4.15.0",
"parse5": "^3.0.1"
}
},
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"requires": {
"color-name": "1.1.3"
}
@ -207,7 +180,8 @@
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
"combined-stream": {
"version": "1.0.8",
@ -221,12 +195,14 @@
"commander": {
"version": "2.20.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
"integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ=="
"integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
"dev": true
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"core-util-is": {
"version": "1.0.2",
@ -234,22 +210,6 @@
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true
},
"css-select": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
"integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
"requires": {
"boolbase": "~1.0.0",
"css-what": "2.1",
"domutils": "1.5.1",
"nth-check": "~1.0.1"
}
},
"css-what": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
"integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg=="
},
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@ -274,53 +234,12 @@
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true
},
"denodeify": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz",
"integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE="
},
"didyoumean": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz",
"integrity": "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8="
},
"diff": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
"integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
"dev": true
},
"dom-serializer": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
"integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
"requires": {
"domelementtype": "^1.3.0",
"entities": "^1.1.1"
}
},
"domelementtype": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
"integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
},
"domhandler": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
"integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
"requires": {
"domelementtype": "1"
}
},
"domutils": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
"integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
"requires": {
"dom-serializer": "0",
"domelementtype": "1"
}
},
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
@ -331,11 +250,6 @@
"safer-buffer": "^2.1.0"
}
},
"entities": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
"integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
},
"es6-promise": {
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
@ -354,7 +268,8 @@
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
"esprima": {
"version": "4.0.1",
@ -392,14 +307,6 @@
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
"dev": true
},
"fd-slicer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
"integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
"requires": {
"pend": "~1.2.0"
}
},
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
@ -420,7 +327,8 @@
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
"getpass": {
"version": "0.1.7",
@ -435,6 +343,7 @@
"version": "7.1.4",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
"integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@ -445,9 +354,9 @@
}
},
"growl": {
"version": "1.10.3",
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz",
"integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==",
"version": "1.10.5",
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
"integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
"dev": true
},
"har-schema": {
@ -469,7 +378,8 @@
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"he": {
"version": "1.1.1",
@ -477,19 +387,6 @@
"integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
"dev": true
},
"htmlparser2": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
"integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
"requires": {
"domelementtype": "^1.3.1",
"domhandler": "^2.3.0",
"domutils": "^1.5.1",
"entities": "^1.1.1",
"inherits": "^2.0.1",
"readable-stream": "^3.1.1"
}
},
"http-proxy-agent": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz",
@ -512,12 +409,12 @@
}
},
"https-proxy-agent": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
"integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==",
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz",
"integrity": "sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==",
"dev": true,
"requires": {
"agent-base": "^4.1.0",
"agent-base": "^4.3.0",
"debug": "^3.1.0"
}
},
@ -525,15 +422,17 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
"is-typedarray": {
"version": "1.0.0",
@ -599,41 +498,6 @@
"verror": "1.10.0"
}
},
"linkify-it": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
"integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
"requires": {
"uc.micro": "^1.0.1"
}
},
"lodash": {
"version": "4.17.15",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
},
"markdown-it": {
"version": "8.4.2",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz",
"integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==",
"requires": {
"argparse": "^1.0.7",
"entities": "~1.1.1",
"linkify-it": "^2.0.0",
"mdurl": "^1.0.1",
"uc.micro": "^1.0.5"
}
},
"mdurl": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
"integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
},
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"mime-db": {
"version": "1.40.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
@ -653,6 +517,7 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@ -673,33 +538,28 @@
}
},
"mocha": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz",
"integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
"integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
"dev": true,
"requires": {
"browser-stdout": "1.3.0",
"commander": "2.11.0",
"browser-stdout": "1.3.1",
"commander": "2.15.1",
"debug": "3.1.0",
"diff": "3.3.1",
"diff": "3.5.0",
"escape-string-regexp": "1.0.5",
"glob": "7.1.2",
"growl": "1.10.3",
"growl": "1.10.5",
"he": "1.1.1",
"minimatch": "3.0.4",
"mkdirp": "0.5.1",
"supports-color": "4.4.0"
"supports-color": "5.4.0"
},
"dependencies": {
"commander": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
"integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
"dev": true
},
"diff": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz",
"integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==",
"version": "2.15.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
"integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
"dev": true
},
"glob": {
@ -716,19 +576,13 @@
"path-is-absolute": "^1.0.0"
}
},
"has-flag": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
"integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
"dev": true
},
"supports-color": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
"integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==",
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
"integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
"dev": true,
"requires": {
"has-flag": "^2.0.0"
"has-flag": "^3.0.0"
}
}
}
@ -744,19 +598,6 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
"mute-stream": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
},
"nth-check": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
"integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
"requires": {
"boolbase": "~1.0.0"
}
},
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
@ -767,54 +608,16 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
"wrappy": "1"
}
},
"os": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/os/-/os-0.1.1.tgz",
"integrity": "sha1-IIhF6J4ZOtTZcUdLk5R3NqVtE/M="
},
"os-homedir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
},
"os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
},
"osenv": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
"integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
"requires": {
"os-homedir": "^1.0.0",
"os-tmpdir": "^1.0.0"
}
},
"parse-semver": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz",
"integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=",
"requires": {
"semver": "^5.1.0"
}
},
"parse5": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
"integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
"requires": {
"@types/node": "*"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
"path-parse": {
"version": "1.0.6",
@ -822,11 +625,6 @@
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
"dev": true
},
"pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
@ -834,9 +632,9 @@
"dev": true
},
"psl": {
"version": "1.1.32",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.1.32.tgz",
"integrity": "sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g==",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz",
"integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==",
"dev": true
},
"punycode": {
@ -857,24 +655,6 @@
"integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==",
"dev": true
},
"read": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
"integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
"requires": {
"mute-stream": "~0.0.4"
}
},
"readable-stream": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
"integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
},
"request": {
"version": "2.88.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
@ -919,9 +699,10 @@
}
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
"integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
"dev": true
},
"safer-buffer": {
"version": "2.1.2",
@ -930,9 +711,10 @@
"dev": true
},
"semver": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
"integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
},
"source-map": {
"version": "0.6.1",
@ -941,9 +723,9 @@
"dev": true
},
"source-map-support": {
"version": "0.5.12",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz",
"integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==",
"version": "0.5.13",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
"integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true,
"requires": {
"buffer-from": "^1.0.0",
@ -953,7 +735,8 @@
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
},
"sshpk": {
"version": "1.16.1",
@ -972,30 +755,15 @@
"tweetnacl": "~0.14.0"
}
},
"string_decoder": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz",
"integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==",
"requires": {
"safe-buffer": "~5.1.0"
}
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
},
"tmp": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz",
"integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=",
"requires": {
"os-tmpdir": "~1.0.1"
}
},
"tough-cookie": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
@ -1021,9 +789,9 @@
"dev": true
},
"tslint": {
"version": "5.18.0",
"resolved": "https://registry.npmjs.org/tslint/-/tslint-5.18.0.tgz",
"integrity": "sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w==",
"version": "5.19.0",
"resolved": "https://registry.npmjs.org/tslint/-/tslint-5.19.0.tgz",
"integrity": "sha512-1LwwtBxfRJZnUvoS9c0uj8XQtAnyhWr9KlNvDIdB+oXyT+VpsOAaEhEgKi1HrZ8rq0ki/AAnbGSv4KM6/AfVZw==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
@ -1041,6 +809,46 @@
"tsutils": "^2.29.0"
}
},
"tslint-microsoft-contrib": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/tslint-microsoft-contrib/-/tslint-microsoft-contrib-6.2.0.tgz",
"integrity": "sha512-6tfi/2tHqV/3CL77pULBcK+foty11Rr0idRDxKnteTaKm6gWF9qmaCNU17HVssOuwlYNyOmd9Jsmjd+1t3a3qw==",
"dev": true,
"requires": {
"tsutils": "^2.27.2 <2.29.0"
},
"dependencies": {
"tsutils": {
"version": "2.28.0",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.28.0.tgz",
"integrity": "sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA==",
"dev": true,
"requires": {
"tslib": "^1.8.1"
}
}
}
},
"tslint-no-unused-expression-chai": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/tslint-no-unused-expression-chai/-/tslint-no-unused-expression-chai-0.1.4.tgz",
"integrity": "sha512-frEWKNTcq7VsaWKgUxMDOB2N/cmQadVkUtUGIut+2K4nv/uFXPfgJyPjuNC/cHyfUVqIkHMAvHOCL+d/McU3nQ==",
"dev": true,
"requires": {
"tsutils": "^3.0.0"
},
"dependencies": {
"tsutils": {
"version": "3.17.1",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz",
"integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==",
"dev": true,
"requires": {
"tslib": "^1.8.1"
}
}
}
},
"tsutils": {
"version": "2.29.0",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
@ -1050,11 +858,6 @@
"tslib": "^1.8.1"
}
},
"tunnel": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz",
"integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM="
},
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
@ -1070,31 +873,12 @@
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
"dev": true
},
"typed-rest-client": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.2.0.tgz",
"integrity": "sha512-FrUshzZ1yxH8YwGR29PWWnfksLEILbWJydU7zfIRkyH7kAEzB62uMAl2WY6EyolWpLpVHeJGgQm45/MaruaHpw==",
"requires": {
"tunnel": "0.0.4",
"underscore": "1.8.3"
}
},
"typescript": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.1.tgz",
"integrity": "sha512-64HkdiRv1yYZsSe4xC1WVgamNigVYjlssIoaH2HcZF0+ijsk5YK2g0G34w9wJkze8+5ow4STd22AynfO6ZYYLw==",
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz",
"integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==",
"dev": true
},
"uc.micro": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
"integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
},
"underscore": {
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
},
"uri-js": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
@ -1104,11 +888,6 @@
"punycode": "^2.1.0"
}
},
"url-join": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz",
"integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg="
},
"url-parse": {
"version": "1.4.7",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
@ -1119,15 +898,10 @@
"requires-port": "^1.0.0"
}
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"uuid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
"integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
"dev": true
},
"verror": {
@ -1141,41 +915,20 @@
"extsprintf": "^1.2.0"
}
},
"vsce": {
"version": "1.66.0",
"resolved": "https://registry.npmjs.org/vsce/-/vsce-1.66.0.tgz",
"integrity": "sha512-Zf4+WD4PhEcOr7jkU08SI9lwFqDhmhk73YOCGQ/tNLaBy+PnnX4eSdqj9LdzDLuI2dsyomJLXzDSNgxuaInxCQ==",
"requires": {
"azure-devops-node-api": "^7.2.0",
"chalk": "^2.4.2",
"cheerio": "^1.0.0-rc.1",
"commander": "^2.8.1",
"denodeify": "^1.2.1",
"didyoumean": "^1.2.1",
"glob": "^7.0.6",
"lodash": "^4.17.10",
"markdown-it": "^8.3.1",
"mime": "^1.3.4",
"minimatch": "^3.0.3",
"osenv": "^0.1.3",
"parse-semver": "^1.1.1",
"read": "^1.0.7",
"semver": "^5.1.0",
"tmp": "0.0.29",
"typed-rest-client": "1.2.0",
"url-join": "^1.1.0",
"yauzl": "^2.3.1",
"yazl": "^2.2.2"
}
"vrsource-tslint-rules": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/vrsource-tslint-rules/-/vrsource-tslint-rules-6.0.0.tgz",
"integrity": "sha512-pmcnJdIVziZTk1V0Cqehmh3gIabBRkBYXkv9vx+1CZDNEa41kNGUBFwQLzw21erYOd2QnD8jJeZhBGqnlT1HWw==",
"dev": true
},
"vscode": {
"version": "1.1.34",
"resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.34.tgz",
"integrity": "sha512-GuT3tCT2N5Qp26VG4C+iGmWMgg/MuqtY5G5TSOT3U/X6pgjM9LFulJEeqpyf6gdzpI4VyU3ZN/lWPo54UFPuQg==",
"version": "1.1.36",
"resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.36.tgz",
"integrity": "sha512-cGFh9jmGLcTapCpPCKvn8aG/j9zVQ+0x5hzYJq5h5YyUXVGa1iamOaB2M2PZXoumQPES4qeAP1FwkI0b6tL4bQ==",
"dev": true,
"requires": {
"glob": "^7.1.2",
"mocha": "^4.0.1",
"mocha": "^5.2.0",
"request": "^2.88.0",
"semver": "^5.4.1",
"source-map-support": "^0.5.0",
@ -1201,24 +954,8 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"yauzl": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
"integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
"requires": {
"buffer-crc32": "~0.2.3",
"fd-slicer": "~1.1.0"
}
},
"yazl": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz",
"integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==",
"requires": {
"buffer-crc32": "~0.2.3"
}
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
}
}
}

Просмотреть файл

@ -25,27 +25,27 @@
"commands": [
{
"command": "Make.buildTarget",
"title": "MAKE: Run the MAKEFILE target of the current build configuration"
"title": "Make: Run the MAKEFILE target of the current build configuration"
},
{
"command": "Make.launchDebug",
"title": "MAKE: Debug the selected binary target"
"title": "Make: Debug the selected binary target"
},
{
"command": "Make.launchRun",
"title": "MAKE: Run the selected binary target in the terminal"
"title": "Make: Run the selected binary target in the terminal"
},
{
"command": "Make.setBuildConfiguration",
"title": "MAKE: Set the current build configuration"
"title": "Make: Set the current build configuration"
},
{
"command": "Make.setBuildTarget",
"title": "MAKE: Set the target to be built by make"
"title": "Make: Set the target to be built by make"
},
{
"command": "Make.setLaunchConfiguration",
"title": "MAKE: Set the make launch configuration"
"title": "Make: Set the make launch configuration"
}
],
"configuration": {
@ -122,10 +122,13 @@
},
"devDependencies": {
"@types/mocha": "^2.2.42",
"@types/node": "^10.12.21",
"@types/node": "^10.14.16",
"tslint": "^5.18.0",
"typescript": "^3.3.1",
"vscode": "^1.1.28"
"tslint-microsoft-contrib": "^6.2.0",
"tslint-no-unused-expression-chai": "^0.1.4",
"vrsource-tslint-rules": "^6.0.0",
"typescript": "^3.5.3",
"vscode": "^1.1.36"
},
"dependencies": {
"module-alias": "^2.0.6",

Просмотреть файл

@ -1,3 +1,5 @@
// Configuration support
import * as child_process from 'child_process';
import * as fs from 'fs';
import * as logger from './logger';
@ -18,7 +20,6 @@ export interface MakeConfiguration {
// A name associated with a particular build command process and args/options
name: string;
// make, nmake, specmake...
// This is sent to spawnChildProcess as process name
// It can have full path, relative path or only tool name
@ -40,14 +41,14 @@ export interface MakeConfiguration {
// If no particular current configuration is defined in settings, set to 'Default'.
let currentMakeConfiguration: string | undefined;
export function getCurrentMakeConfiguration(): string | undefined { return currentMakeConfiguration; }
export function setCurrentMakeConfiguration(configuration: string) {
export function setCurrentMakeConfiguration(configuration: string): void {
currentMakeConfiguration = configuration;
statusBar.setConfiguration(currentMakeConfiguration);
getCommandForConfiguration(currentMakeConfiguration);
}
// Read the current configuration from settings storage, update status bar item
function readCurrentMakeConfiguration() {
function readCurrentMakeConfiguration(): void {
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration();
currentMakeConfiguration = workspaceConfiguration.get<string>("Make.buildConfiguration");
if (!currentMakeConfiguration) {
@ -77,8 +78,8 @@ export function launchConfigurationToString(configuration: LaunchConfiguration):
}
export function stringToLaunchConfiguration(str: string): LaunchConfiguration | undefined {
let regexp = /(.*)\>(.*)\((.*)\)/mg;
let match = regexp.exec(str);
let regexp: RegExp = /(.*)\>(.*)\((.*)\)/mg;
let match: RegExpExecArray | null = regexp.exec(str);
if (match) {
let fullPath: string = util.makeFullPath(match[2], match[1]);
@ -88,7 +89,7 @@ export function stringToLaunchConfiguration(str: string): LaunchConfiguration |
cwd: match[1],
binary: fullPath,
args: splitArgs
}
};
} else {
return undefined;
}
@ -96,13 +97,13 @@ export function stringToLaunchConfiguration(str: string): LaunchConfiguration |
let currentLaunchConfiguration: LaunchConfiguration | undefined;
export function getCurrentLaunchConfiguration(): LaunchConfiguration | undefined { return currentLaunchConfiguration; }
export function setCurrentLaunchConfiguration(configuration: LaunchConfiguration) {
export function setCurrentLaunchConfiguration(configuration: LaunchConfiguration): void {
currentLaunchConfiguration = configuration;
statusBar.setLaunchConfiguration(launchConfigurationToString(currentLaunchConfiguration));
}
// Read the current launch configuration from settings storage, update status bar item
function readCurrentLaunchConfiguration() {
function readCurrentLaunchConfiguration(): void {
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration();
currentLaunchConfiguration = workspaceConfiguration.get<LaunchConfiguration>("Make.launchConfiguration");
if (currentLaunchConfiguration) {
@ -117,22 +118,22 @@ function readCurrentLaunchConfiguration() {
// for IntelliSense.
let configurationCommandName: string;
export function getConfigurationCommandName(): string { return configurationCommandName; }
export function setConfigurationCommandName(name: string) { configurationCommandName = name; }
export function setConfigurationCommandName(name: string): void { configurationCommandName = name; }
let configurationCommandArgs: string[] = [];
export function getConfigurationCommandArgs(): string[] { return configurationCommandArgs; }
export function setConfigurationCommandArgs(args: string[]) { configurationCommandArgs = args; }
export function setConfigurationCommandArgs(args: string[]): void { configurationCommandArgs = args; }
// Read from settings storage, update status bar item
// Current make configuration command = process name + arguments
function readCurrentMakeConfigurationCommand() {
function readCurrentMakeConfigurationCommand(): void {
// Read from disk instead of from the MakeConfiguration array, to get up to date content
readMakeConfigurations();
getCommandForConfiguration(currentMakeConfiguration);
}
// Helper to find in the array of MakeConfiguration which command/args correspond to a configuration name
export function getCommandForConfiguration(configuration: string | undefined) {
export function getCommandForConfiguration(configuration: string | undefined): void {
let makeConfiguration: MakeConfiguration | undefined = makeConfigurations.find(k => {
if (k.name === currentMakeConfiguration) {
return { ...k, keep: true };
@ -154,9 +155,9 @@ export function getCommandForConfiguration(configuration: string | undefined) {
// The file is allowed to be missing, in which case the MakeConfiguration array remains empty.
let makeConfigurations: MakeConfiguration[] = [];
export function getMakeConfigurations(): MakeConfiguration[] { return makeConfigurations; }
export function setMakeConfigurations(configurations: MakeConfiguration[]) { makeConfigurations = configurations; }
export function setMakeConfigurations(configurations: MakeConfiguration[]): void { makeConfigurations = configurations; }
function readMakeConfigurations() {
function readMakeConfigurations(): void {
let configurationsJsonPath: string = vscode.workspace.rootPath + "\/.vscode\/make_configurations.json";
if (util.checkFileExistsSync(configurationsJsonPath)) {
logger.message("Reading configurations from file \/.vscode\/make_configurations.json");
@ -173,10 +174,10 @@ function readMakeConfigurations() {
// Saved into the settings storage. Also reflected in the configuration status bar button
let currentTarget: string | undefined;
export function getCurrentTarget(): string | undefined { return currentTarget; }
export function setCurrentTarget(target: string | undefined) { currentTarget = target; }
export function setCurrentTarget(target: string | undefined): void { currentTarget = target; }
// Read current target from settings storage, update status bar item
function readCurrentTarget() {
function readCurrentTarget(): void {
// If no particular target is defined in settings, use 'Default' for the button
// but keep the variable empty, to not apend it to the make command.
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration();
@ -191,7 +192,7 @@ function readCurrentTarget() {
}
// Initialization from settings (or backup default rules), done at activation time
export function initFromSettings() {
export function initFromSettings(): void {
readCurrentMakeConfiguration();
readCurrentMakeConfigurationCommand();
readCurrentTarget();
@ -200,7 +201,7 @@ export function initFromSettings() {
// Fill a drop-down with all the configuration names defined by the user in .vscode\make_configurations.json
// Triggers a cpptools configuration provider update after selection.
export async function setNewConfiguration() {
export async function setNewConfiguration(): Promise<void> {
// read from the configurations file instead of currentMakefileConfiguration
// just in case the content changed on disk.
await readMakeConfigurations();
@ -208,7 +209,7 @@ export async function setNewConfiguration() {
return k.name;
}));
const chosen = await vscode.window.showQuickPick(items);
const chosen: string | undefined = await vscode.window.showQuickPick(items);
if (chosen) {
currentMakeConfiguration = chosen;
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration();
@ -227,7 +228,7 @@ export async function setNewConfiguration() {
// TODO: deduce also symbol paths.
// TODO: implement UI to collect this information.
// TODO: refactor the dry-run part into make.ts
export async function setNewLaunchConfiguration() {
export async function setNewLaunchConfiguration(): Promise<void> {
let commandArgs: string[] = [];
// Append --dry-run (to not perform any real build operation),
// --always-make (to not skip over targets when timestamps indicate nothing needs to be done)
@ -247,22 +248,22 @@ export async function setNewLaunchConfiguration() {
let process: child_process.ChildProcess;
try {
var stdout = (result: string): void => {
let stdout = (result: string): void => {
stdoutStr += result;
};
var stderr = (result: string): void => {
let stderr = (result: string): void => {
stderrStr += result;
};
var closing = (retCode: number, signal: string): void => {
let closing = (retCode: number, signal: string): void => {
if (retCode !== 0) {
logger.message("The verbose make dry-run command for parsing binaries launch configuration failed.");
logger.message(stderrStr);
}
logger.message("The dry-run output for parsing the binaries launch configuration");
logger.message(stdoutStr);
//logger.message("The dry-run output for parsing the binaries launch configuration");
//logger.message(stdoutStr);
let binariesLaunchConfigurations: LaunchConfiguration[] = parser.parseForLaunchConfiguration(stdoutStr);
selectLaunchConfiguration(binariesLaunchConfigurations);
};
@ -275,7 +276,7 @@ export async function setNewLaunchConfiguration() {
}
// TODO: refactor the dry-run part into make.ts
export async function setNewTarget() {
export async function setNewTarget(): Promise<void> {
let commandArgs: string[] = [];
// all: must be first argument, to make sure all targets are evaluated and not a subset
// --dry-run: to ensure no real build is performed for the targets analysis
@ -288,15 +289,15 @@ export async function setNewTarget() {
let process: child_process.ChildProcess;
try {
var stdout = (result: string): void => {
let stdout = (result: string): void => {
stdoutStr += result;
};
var stderr = (result: string): void => {
let stderr = (result: string): void => {
stderrStr += result;
};
var closing = (retCode: number, signal: string): void => {
let closing = (retCode: number, signal: string): void => {
if (retCode !== 0) {
logger.message("The verbose make dry-run command for parsing targets failed.");
logger.message(stderrStr);
@ -318,8 +319,8 @@ export async function setNewTarget() {
// Fill a drop-down with all the target names run by building the makefile for the current configuration
// Triggers a cpptools configuration provider update after selection.
// TODO: change the UI list to multiple selections mode and store an array of current active targets
export async function selectTarget(makefileTargets: string[]) {
const chosen = await vscode.window.showQuickPick(makefileTargets);
export async function selectTarget(makefileTargets: string[]): Promise<void> {
const chosen: string | undefined = await vscode.window.showQuickPick(makefileTargets);
if (chosen) {
currentTarget = chosen;
statusBar.setTarget(currentTarget);
@ -334,7 +335,7 @@ export async function selectTarget(makefileTargets: string[]) {
// Fill a drop-down with all the launch configurations found for binaries built by the makefile
// under the scope of the current build configuration and target
// Selection updates current launch configuration that will be ready for the next debug/run operation
export async function selectLaunchConfiguration(launchConfigurations: LaunchConfiguration[]) {
export async function selectLaunchConfiguration(launchConfigurations: LaunchConfiguration[]): Promise<void> {
let items: string[] = [];
launchConfigurations.forEach(config => {
items.push(launchConfigurationToString(config));
@ -345,7 +346,7 @@ export async function selectLaunchConfiguration(launchConfigurations: LaunchConf
// TODO: create a quick pick with description and details for items
// to better view the long targets commands
const chosen = await vscode.window.showQuickPick(items);
const chosen: string | undefined = await vscode.window.showQuickPick(items);
if (chosen) {
statusBar.setLaunchConfiguration(chosen);
currentLaunchConfiguration = stringToLaunchConfiguration(chosen);
@ -353,4 +354,3 @@ export async function selectLaunchConfiguration(launchConfigurations: LaunchConf
workspaceConfiguration.update("Make.launchConfiguration", currentLaunchConfiguration);
}
}

Просмотреть файл

@ -1,3 +1,5 @@
// Support for integration with CppTools Custom Configuration Provider
import * as logger from './logger';
import * as path from 'path';
import * as util from './util';
@ -5,7 +7,7 @@ import * as vscode from 'vscode';
import * as cpp from 'vscode-cpptools';
let cummulativeBrowsePath: string[] = [];
export function clearCummulativeBrowsePath() {
export function clearCummulativeBrowsePath(): void {
cummulativeBrowsePath = [];
}
@ -17,26 +19,25 @@ export class CppConfigurationProvider implements cpp.CustomConfigurationProvider
private workspaceBrowseConfiguration: cpp.WorkspaceBrowseConfiguration = { browsePath: [] };
private getConfiguration(uri: vscode.Uri): cpp.SourceFileConfigurationItem | undefined {
const norm_path = path.normalize(uri.fsPath);
const norm_path: string = path.normalize(uri.fsPath);
return this.fileIndex.get(norm_path);
}
public async canProvideConfiguration(uri: vscode.Uri) {
public async canProvideConfiguration(uri: vscode.Uri): Promise<boolean> {
return !!this.getConfiguration(uri);
}
public async provideConfigurations(uris: vscode.Uri[]) {
public async provideConfigurations(uris: vscode.Uri[]): Promise<cpp.SourceFileConfigurationItem[]> {
return util.dropNulls(uris.map(u => this.getConfiguration(u)));
}
public async canProvideBrowseConfiguration() {
public async canProvideBrowseConfiguration(): Promise<boolean> {
return true;
}
public async provideBrowseConfiguration() { return this.workspaceBrowseConfiguration; }
public async provideBrowseConfiguration(): Promise<cpp.WorkspaceBrowseConfiguration> { return this.workspaceBrowseConfiguration; }
public dispose() { }
public dispose(): void { }
private readonly fileIndex = new Map<string, cpp.SourceFileConfigurationItem>();
@ -44,7 +45,7 @@ export class CppConfigurationProvider implements cpp.CustomConfigurationProvider
// - incorporate relevant settings from the environment
// INCLUDE= for include paths
// _CL_= parse for defines, undefines, standard and response files
// Attention for defines syntax: _CL_=/DMyDefine#1 versus /DMyDefine1
// Attention for defines syntax: _CL_=/DMyDefine#1 versus /DMyDefine=1
// - take into account the effect of undefines /U
// In case of conflicting switches, the command prompt overwrites the makefile
public buildCustomConfigurationProvider(
@ -55,7 +56,7 @@ export class CppConfigurationProvider implements cpp.CustomConfigurationProvider
intelliSenseMode: util.IntelliSenseMode,
compilerPath: string,
windowsSdkVersion: string,
filesPaths: string[]) {
filesPaths: string[]): void {
const configuration: cpp.SourceFileConfiguration = {
defines,
standard,
@ -100,7 +101,7 @@ export class CppConfigurationProvider implements cpp.CustomConfigurationProvider
};
}
public logConfigurationProvider() {
public logConfigurationProvider(): void {
logger.message("Sending Workspace Browse Configuration: -----------------------------------");
logger.message(" Browse Path: " + this.workspaceBrowseConfiguration.browsePath.join(";"));
logger.message(" Standard: " + this.workspaceBrowseConfiguration.standard);
@ -127,4 +128,3 @@ export class CppConfigurationProvider implements cpp.CustomConfigurationProvider
});
}
}

Просмотреть файл

@ -1,6 +1,6 @@
'use strict';
// Makefile Tools extension
require('module-alias/register');
'use strict';
import * as configuration from './configuration';
import * as cpptools from './cpptools';
@ -29,18 +29,18 @@ export class MakefileToolsExtension {
}
// Parse the dry-run output and populate data for cpptools
public constructIntellisense(dryRunOutputStr: string) {
public constructIntellisense(dryRunOutputStr: string): void {
parser.parseForCppToolsCustomConfigProvider(dryRunOutputStr);
}
public dispose() {
public dispose(): void {
if (this.cppToolsAPI) {
this.cppToolsAPI.dispose();
}
}
// Register this extension as a new provider or request an update
public async registerCppToolsProvider() {
public async registerCppToolsProvider(): Promise<void> {
await this.ensureCppToolsProviderRegistered();
if (this.cppToolsAPI) {
@ -53,7 +53,7 @@ export class MakefileToolsExtension {
}
}
public ensureCppToolsProviderRegistered() {
public ensureCppToolsProviderRegistered(): Promise<void> {
// make sure this extension is registered as provider only once
if (!this.cppConfigurationProviderRegister) {
this.cppConfigurationProviderRegister = this.registerCppTools();
@ -62,7 +62,7 @@ export class MakefileToolsExtension {
return this.cppConfigurationProviderRegister;
}
public async registerCppTools() {
public async registerCppTools(): Promise<void> {
if (!this.cppToolsAPI) {
this.cppToolsAPI = await cpp.getCppToolsApi(cpp.Version.v2);
}
@ -81,14 +81,14 @@ export class MakefileToolsExtension {
compilerPath: string,
windowsSdkVersion: string,
filesPaths: string[]
) {
): void {
this.cppConfigurationProvider.buildCustomConfigurationProvider(defines, includePath, forcedInclude, standard, intelliSenseMode, compilerPath, windowsSdkVersion, filesPaths);
}
}
// A change of target or configuration triggered a new dry-run,
// which produced a new output string to be parsed
export async function updateProvider(dryRunOutputStr: string) {
export async function updateProvider(dryRunOutputStr: string): Promise<void> {
logger.message("Updating the CppTools IntelliSense Configuration Provider.");
if (extension) {
extension.constructIntellisense(dryRunOutputStr);
@ -96,7 +96,7 @@ export async function updateProvider(dryRunOutputStr: string) {
}
}
export async function activate(context: vscode.ExtensionContext) {
export async function activate(context: vscode.ExtensionContext): Promise<void> {
vscode.window.showInformationMessage('The extension "vscode-makefile-tools" is now active');
statusBar = ui.getUI();
@ -150,7 +150,7 @@ export async function activate(context: vscode.ExtensionContext) {
make.dryRun();
}
export async function deactivate() {
export async function deactivate(): Promise<void> {
vscode.window.showInformationMessage('The extension "vscode-makefile-tools" is de-activated');
const items = [

Просмотреть файл

@ -1,3 +1,5 @@
// Launch support: debug and run in terminal
import * as configuration from './configuration';
import * as util from './util';
import * as vscode from 'vscode';
@ -92,13 +94,13 @@ export class Launcher implements vscode.Disposable {
// Invoke a VS Code running terminal passing it all the information
// from the current launch configuration
public async runCurrentTarget() {
public async runCurrentTarget(): Promise<vscode.Terminal> {
const terminalOptions: vscode.TerminalOptions = {
name: 'Make/Launch',
};
// Use cmd.exe on Windows
if (process.platform == 'win32') {
if (process.platform === 'win32') {
terminalOptions.shellPath = 'C:\\Windows\\System32\\cmd.exe';
terminalOptions.cwd = this.launchCurrentDir();
}
@ -108,14 +110,14 @@ export class Launcher implements vscode.Disposable {
}
// Add a pair of quotes just in case there is a space in the binary path
let terminalCommand: string = '"' + this.launchTargetPath() + '" '
let terminalCommand: string = '"' + this.launchTargetPath() + '" ';
terminalCommand += this.launchTargetArgs().join(" ");
this.launchTerminal.sendText(terminalCommand);
this.launchTerminal.show();
return this.launchTerminal;
}
public dispose() {
public dispose(): void {
if (this.launchTerminal) {
this.launchTerminal.dispose();
}

Просмотреть файл

@ -1,10 +1,12 @@
// Logging support
import * as vscode from 'vscode';
// todo: implement more verbosity levels (currently loggingLevel is read but never used)
let loggingLevel: string | undefined;
let makeOutputChannel: vscode.OutputChannel | undefined;
function getCurrentLoggingLevel() {
function getCurrentLoggingLevel(): string | undefined {
if (!loggingLevel) {
let workspaceConfiguration: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration();
loggingLevel = workspaceConfiguration.get<string>("Make.loggingLevel");
@ -13,7 +15,7 @@ function getCurrentLoggingLevel() {
return loggingLevel;
}
function getOutputChannel() {
function getOutputChannel(): vscode.OutputChannel {
if (!makeOutputChannel) {
makeOutputChannel = vscode.window.createOutputChannel("Makefile tools");
}
@ -21,14 +23,14 @@ function getOutputChannel() {
return makeOutputChannel;
}
export function message(message: string) {
let channel = getOutputChannel();
export function message(message: string): void {
let channel: vscode.OutputChannel = getOutputChannel();
channel.appendLine(message);
}
// This is used for a few scenarios where the message already has end of line incorporated.
// Example: stdout/stderr of a child process read before the stream is closed.
export function messageNoCR(message: string) {
let channel = getOutputChannel();
export function messageNoCR(message: string): void {
let channel: vscode.OutputChannel = getOutputChannel();
channel.append(message);
}

Просмотреть файл

@ -1,3 +1,5 @@
// Support for make operations
import * as child_process from 'child_process';
import * as configuration from './configuration';
import * as ext from './extension';
@ -5,12 +7,12 @@ import * as logger from './logger';
import * as util from './util';
import * as vscode from 'vscode';
export async function buildCurrentTarget() {
export async function buildCurrentTarget(): Promise<void> {
let process: child_process.ChildProcess;
let commandArgs: string[] = [];
// Prepend the target to the arguments given in the configurations json.
let currentTarget = configuration.getCurrentTarget();
let currentTarget: string | undefined = configuration.getCurrentTarget();
if (currentTarget) {
commandArgs.push(currentTarget);
}
@ -21,15 +23,15 @@ export async function buildCurrentTarget() {
try {
// Append without end of line since there is one already included in the stdout/stderr fragments
var stdout = (result: string): void => {
let stdout = (result: string): void => {
logger.messageNoCR(result);
};
var stderr = (result: string): void => {
let stderr = (result: string): void => {
logger.messageNoCR(result);
};
var closing = (retCode: number, signal: string): void => {
let closing = (retCode: number, signal: string): void => {
if (retCode !== 0) {
logger.message("The current target failed to build.");
} else {
@ -44,13 +46,13 @@ export async function buildCurrentTarget() {
}
}
export async function dryRun() {
export async function dryRun(): Promise<void> {
let process: child_process.ChildProcess;
let commandArgs: string[] = [];
// Prepend the target to the arguments given in the configurations json.
let currentTarget = configuration.getCurrentTarget();
let currentTarget: string | undefined = configuration.getCurrentTarget();
if (currentTarget) {
commandArgs.push(currentTarget);
}
@ -70,19 +72,21 @@ export async function dryRun() {
let stdoutStr: string = "";
let stderrStr: string = "";
var stdout = (result: string): void => {
let stdout = (result: string): void => {
stdoutStr += result;
};
var stderr = (result: string): void => {
let stderr = (result: string): void => {
stderrStr += result;
};
var closing = (retCode: number, signal: string): void => {
let closing = (retCode: number, signal: string): void => {
if (retCode !== 0) {
logger.message("The make dry-run command failed.");
logger.message(stderrStr);
}
console.log("Make dry-run output to parse is:\n" + stdoutStr);
//console.log("Make dry-run output to parse is:\n" + stdoutStr);
ext.updateProvider(stdoutStr);
};
@ -92,4 +96,3 @@ export async function dryRun() {
return;
}
}

Просмотреть файл

@ -10,7 +10,6 @@ import * as logger from './logger';
import * as path from 'path';
import * as util from './util';
import * as vscode from 'vscode';
import { LaunchConfiguration } from './configuration';
const compilers: string[] = ["clang", "cl", "gcc", "cc", "icc", "icl", "g\\+\\+", "c\\+\\+"];
const linkers: string[] = ["link", "ilink", "ld", "gcc", "clang", "cc", "g\\+\\+", "c\\+\\+"]; // any aliases/symlinks ?
@ -19,20 +18,22 @@ const sourceFileExtensions: string[] = ["cpp", "cc", "cxx", "c"];
export function parseTargets(verboseLog: string): string[] {
// Extract the text between "# Files" and "# Finished Make data base" lines
// There can be more than one matching section.
let regexpExtract = /(# Files\n*)([\s\S]*?)(# Finished Make data base)/mg;
let result: string[] | null;
let extractedLog : string = "";
let regexpExtract: RegExp = /(# Files\n*)([\s\S]*?)(# Finished Make data base)/mg;
let result: RegExpExecArray | null;
let extractedLog: string = "";
var matches: string[] = [];
var match: string[] | null;
let matches: string[] = [];
let match: string[] | null;
while (result = regexpExtract.exec(verboseLog)) {
result = regexpExtract.exec(verboseLog);
while (result) {
extractedLog = result[2];
// skip lines starting with {#,.} or preceeded by "# Not a target" and extract the target
let regexpTarget = /^(?!\n?[#\.])(?<!^\n?# Not a target:\s*)\s*(\S+):\s+/mg;
let regexpTarget: RegExp = /^(?!\n?[#\.])(?<!^\n?# Not a target:\s*)\s*(\S+):\s+/mg;
while (match = regexpTarget.exec(extractedLog)) {
match = regexpTarget.exec(extractedLog);
while (match) {
// Make sure we don't insert duplicates.
// They can be caused by the makefile syntax of defining variables for a target.
// That creates multiple lines with the same target name followed by :,
@ -40,7 +41,11 @@ export function parseTargets(verboseLog: string): string[] {
if (!matches.includes(match[1])) {
matches.push(match[1]);
}
match = regexpTarget.exec(extractedLog);
}
result = regexpExtract.exec(verboseLog);
}
if (matches) {
@ -124,7 +129,7 @@ function parseLineAsTool(
// make sure to append extension if the array of tools has only one element,
// in which case .join is not doing anything
if (toolNames.length == 1) {
if (toolNames.length === 1) {
regexpStr += ('\\.exe');
}
@ -134,7 +139,7 @@ function parseLineAsTool(
regexpStr += toolNames.join('|') + ')[\\s\\"]+(.*)$';
let regexp: RegExp = RegExp(regexpStr, "mg");
let match = regexp.exec(line);
let match: RegExpExecArray | null = regexp.exec(line);
if (!match) {
return undefined;
@ -187,25 +192,17 @@ function parseMultipleSwitchFromToolArguments(args: string, sw: string): string[
// - can be wrapped by a pair of ', before the switch prefix and after the switch value
// - the value can be wrapped by a pair of "
// - one or none or more spaces/tabs between the switch and the value
let regexpStr = '(^|\\s+)\\\'?(\\/' + sw + '(:|=|\\s*)|-' + sw + '(:|=|\\s*))(\\".*?\\"|[^\\\'\\s]+)\\\'?';
let regexp = RegExp(regexpStr, "mg");
var match: string[] | null;
var results: string[] = [];
let regexpStr: string = '(^|\\s+)\\\'?(\\/' + sw + '(:|=|\\s*)|-' + sw + '(:|=|\\s*))(\\".*?\\"|[^\\\'\\s]+)\\\'?';
let regexp: RegExp = RegExp(regexpStr, "mg");
let match: RegExpExecArray | null;
let results: string[] = [];
while (match = regexp.exec(args)) {
match = regexp.exec(args);
while (match) {
let result: string = match[5].trim();
// Reject a case when the given switch is a substring of another switch:
// Hypotethical example switches "sw" and "switch" (todo: find real example):
// -switch:value should be parsed as switch="switch" and value="value",
// but with the regexp above and without the check below
// it is parsed as switch="sw" and value="itch:value"
if (match[5].includes(":") || match[5].includes("=")) {
continue;
}
result = result.replace(/"/g, "");
results.push(result);
match = regexp.exec(args);
}
return results;
@ -226,25 +223,17 @@ function parseSingleSwitchFromToolArguments(args: string, sw: string[]): string
// - can be wrapped by a pair of ', before the switch prefix and after the switch value
// - the value can be wrapped by a pair of "
// - ':' or '=' or one/none/more spaces/tabs between the switch and the value
let regexpStr = '(^|\\s+)\\\'?(\\/|-)(' + sw.join("|") + ')(:|=|\\s*)(\\".*?\\"|[^\\\'\\s]+)\\\'?';
let regexp = RegExp(regexpStr, "mg");
var match: string[] | null;
var results: string[] = [];
let regexpStr: string = '(^|\\s+)\\\'?(\\/|-)(' + sw.join("|") + ')(:|=|\\s*)(\\".*?\\"|[^\\\'\\s]+)\\\'?';
let regexp: RegExp = RegExp(regexpStr, "mg");
let match: RegExpExecArray | null;
let results: string[] = [];
while (match = regexp.exec(args)) {
match = regexp.exec(args);
while (match) {
let result: string = match[5].trim();
// Reject a case when the given switch is a substring of another switch:
// Hypotethical example switches "sw" and "switch" (todo: find real example):
// -switch:value should be parsed as switch="switch" and value="value",
// but with the regexp above and without the check below
// it is parsed as switch="sw" and value="itch:value"
if (match[5].includes(":") || match[5].includes("=")) {
continue;
}
result = result.replace(/"/g, "");
results.push(result);
match = regexp.exec(args);
}
return results.pop();
@ -263,11 +252,10 @@ function parseSingleSwitchFromToolArguments(args: string, sw: string[]): string
function isSwitchPassedInArguments(args: string, sw: string[]): boolean {
// - or / as switch prefix
// - one or more spaces/tabs after
let regexpStr = '(\\s*)(\\/|-)(' + sw.join("|") + ')(\\s+|$)';
let regexp = RegExp(regexpStr, "mg");
var match: string[] | null;
let regexpStr: string = '(\\s*)(\\/|-)(' + sw.join("|") + ')(\\s+|$)';
let regexp: RegExp = RegExp(regexpStr, "mg");
if (match = regexp.exec(args)) {
if (regexp.exec(args)) {
return true;
}
@ -282,7 +270,7 @@ function parseFilesFromToolArguments(args: string, exts: string[]): string[] {
// one or more spaces/tabs before and after
// with or without quotes surrounding the argument
// (todo: handle the scenario when quotes enclose just the directory path, without the file name)
let regexpStr = '(';
let regexpStr: string = '(';
exts.forEach(ext => {
regexpStr += '\\".*?\\.' + ext + '\\"|';
regexpStr += '\\S+\\.' + ext;
@ -293,14 +281,16 @@ function parseFilesFromToolArguments(args: string, exts: string[]): string[] {
});
regexpStr += ')';
let regexp = RegExp(regexpStr, "mg");
var match: string[] | null;
var files: string[] = [];
let regexp: RegExp = RegExp(regexpStr, "mg");
let match: string[] | null;
let files: string[] = [];
while (match = regexp.exec(args)) {
match = regexp.exec(args);
while (match) {
let result: string = match[1].trim();
result = result.replace(/"/g, "");
files.push(result);
match = regexp.exec(args);
}
return files;
@ -313,7 +303,7 @@ function currentPathAfterCommand(line: string, currentPathHistory: string[]): st
line = line.trimLeft();
let lastCurrentPath: string = (currentPathHistory.length > 0) ? currentPathHistory[currentPathHistory.length - 1] : "";
let newCurrentPath : string = "";
let newCurrentPath: string = "";
if (line.startsWith('cd -')) {
// Swap the last two current paths in the history.
@ -321,17 +311,17 @@ function currentPathAfterCommand(line: string, currentPathHistory: string[]): st
currentPathHistory.pop();
}
let lastCurrentPath2 : string = (currentPathHistory.length > 0) ? currentPathHistory.pop() || "" : lastCurrentPath;
let lastCurrentPath2: string = (currentPathHistory.length > 0) ? currentPathHistory.pop() || "" : lastCurrentPath;
logger.message("Analyzing line: " +line);
logger.message("Analyzing line: " + line);
logger.message("CD- command: leaving directory " + lastCurrentPath + " and entering directory " + lastCurrentPath2);
currentPathHistory.push(lastCurrentPath);
currentPathHistory.push(lastCurrentPath2);
} else if (line.startsWith('popd') || line.includes('Leaving directory')) {
let lastCurrentPath : string = (currentPathHistory.length > 0) ? currentPathHistory[currentPathHistory.length - 1] : "";
let lastCurrentPath: string = (currentPathHistory.length > 0) ? currentPathHistory[currentPathHistory.length - 1] : "";
currentPathHistory.pop();
let lastCurrentPath2 : string = (currentPathHistory.length > 0) ? currentPathHistory[currentPathHistory.length - 1] : "";
logger.message("Analyzing line: " +line);
let lastCurrentPath2: string = (currentPathHistory.length > 0) ? currentPathHistory[currentPathHistory.length - 1] : "";
logger.message("Analyzing line: " + line);
logger.message("POPD command or end of MAKE -C: leaving directory " + lastCurrentPath + " and entering directory " + lastCurrentPath2);
} else if (line.startsWith('cd')) {
newCurrentPath = util.makeFullPath(line.slice(3), lastCurrentPath);
@ -346,23 +336,23 @@ function currentPathAfterCommand(line: string, currentPathHistory: string[]): st
}
currentPathHistory.push(newCurrentPath);
logger.message("Analyzing line: " +line);
logger.message("Analyzing line: " + line);
logger.message("CD command: entering directory " + newCurrentPath);
} else if (line.startsWith('pushd')) {
newCurrentPath = util.makeFullPath(line.slice(6), lastCurrentPath);
currentPathHistory.push(newCurrentPath);
logger.message("Analyzing line: " +line);
logger.message("Analyzing line: " + line);
logger.message("PUSHD command: entering directory " + newCurrentPath);
} else if (line.includes('Entering directory')) {
// equivalent to pushd
let match = line.match("(.*)(Entering directory ')(.*)'");
let match: RegExpMatchArray | null = line.match("(.*)(Entering directory ')(.*)'");
if (match) {
newCurrentPath = util.makeFullPath(match[3], lastCurrentPath) || "";
} else {
newCurrentPath = "Could not parse directory";
}
logger.message("Analyzing line: " +line);
logger.message("Analyzing line: " + line);
logger.message("MAKE -C: entering directory " + newCurrentPath);
currentPathHistory.push(newCurrentPath);
}
@ -373,7 +363,7 @@ function currentPathAfterCommand(line: string, currentPathHistory: string[]): st
// Parse the output of the make dry-run command in order to provide CppTools
// with information about includes, defines, compiler path....etc...
// as needed by CustomConfigurationProvider
export function parseForCppToolsCustomConfigProvider(dryRunOutputStr: string) {
export function parseForCppToolsCustomConfigProvider(dryRunOutputStr: string): void {
logger.message('Parsing dry-run output for CppTools Custom Configuration Provider...');
// Do some preprocessing on the dry-run output to make the RegExp parsing easier
@ -404,9 +394,9 @@ export function parseForCppToolsCustomConfigProvider(dryRunOutputStr: string) {
logger.message("Found compiler command: " + line);
// Compiler path is either what the makefile provides or found in the PATH environment variable or empty
let compilerFullPath = compilerTool.fullPath || "";
let compilerFullPath: string = compilerTool.fullPath || "";
if (!compilerTool.found) {
let toolBaseName : string = path.basename(compilerFullPath);
let toolBaseName: string = path.basename(compilerFullPath);
compilerFullPath = util.toolPathInEnv(toolBaseName) || "";
}
logger.message(" Compiler path: " + compilerFullPath);
@ -430,7 +420,7 @@ export function parseForCppToolsCustomConfigProvider(dryRunOutputStr: string) {
// Parse the IntelliSense mode
// how to deal with aliases and symlinks (CC, C++), which can point to any toolsets
var intelliSenseMode: util.IntelliSenseMode = "msvc-x64";
let intelliSenseMode: util.IntelliSenseMode = "msvc-x64";
if (path.basename(compilerTool.fullPath).startsWith("clang")) {
intelliSenseMode = "clang-x64";
} else if (path.basename(compilerTool.fullPath).startsWith("gcc") ||
@ -441,7 +431,7 @@ export function parseForCppToolsCustomConfigProvider(dryRunOutputStr: string) {
// For windows, parse the sdk version
// todo: scan on disk for most recent sdk installation
var windowsSDKVersion: string | undefined = "";
let windowsSDKVersion: string | undefined = "";
if (process.platform === "win32") {
windowsSDKVersion = process.env["WindowsSDKVersion"];
if (!windowsSDKVersion) {
@ -465,7 +455,7 @@ export function parseForCppToolsCustomConfigProvider(dryRunOutputStr: string) {
// Parse the output of the make dry-run command in order to provide VS Code debugger
// with information about binaries, their execution paths and arguments
export function parseForLaunchConfiguration(dryRunOutputStr: string): LaunchConfiguration[] {
export function parseForLaunchConfiguration(dryRunOutputStr: string): configuration.LaunchConfiguration[] {
logger.message('Parsing dry-run output for Launch (debug/run) configuration...');
// Do some preprocessing on the dry-run output to make the RegExp parsing easier
@ -479,7 +469,7 @@ export function parseForLaunchConfiguration(dryRunOutputStr: string): LaunchConf
// array of full path executables built by this makefile
let targetBinaries: string[] = [];
// array of launch configurations, for each of the binaries above
let launchConfigurations: LaunchConfiguration[] = [];
let launchConfigurations: configuration.LaunchConfiguration[] = [];
// The first pass of reading the dry-run output, line by line
// searching for compilers, linkers and directory changing commands
@ -596,7 +586,7 @@ export function parseForLaunchConfiguration(dryRunOutputStr: string): LaunchConf
// Include limited launch configuration, when only the binary is known,
// in which case the execution path is defaulting to workspace root folder
// and there are no args.
let launchConfiguration : LaunchConfiguration = {
let launchConfiguration: configuration.LaunchConfiguration = {
binary: targetBinary,
cwd: vscode.workspace.rootPath || "",
args: []
@ -656,7 +646,7 @@ export function parseForLaunchConfiguration(dryRunOutputStr: string): LaunchConf
// Include complete launch configuration: binary, execution path and args
// are known from parsing the dry-run
let splitArgs: string[] = targetBinaryTool.arguments.split(" ");
let launchConfiguration: LaunchConfiguration = {
let launchConfiguration: configuration.LaunchConfiguration = {
binary: targetBinaryTool.fullPath,
cwd: currentPath,
// TODO: consider optionally quoted arguments

Просмотреть файл

@ -1,3 +1,5 @@
// UI support for this extension: buttons and quickpicks.
import * as configuration from './configuration';
import * as path from 'path';
import * as vscode from 'vscode';
@ -12,15 +14,15 @@ export class UI {
private debugButton: vscode.StatusBarItem;
private runButton: vscode.StatusBarItem;
public setConfiguration(configuration: string) {
public setConfiguration(configuration: string): void {
this.configurationButton.text = "Build configuration: " + configuration;
}
public setTarget(target: string) {
public setTarget(target: string): void {
this.targetButton.text = "Target to build: " + target;
}
public setLaunchConfiguration(launchConfigurationStr: string | undefined) {
public setLaunchConfiguration(launchConfigurationStr: string | undefined): void {
if (launchConfigurationStr) {
this.launchConfigurationButton.text = "Launch configuration: ";
this.launchConfigurationButton.text += "[";

Просмотреть файл

@ -1,3 +1,5 @@
// Helper APIs used by this extension
import * as fs from 'fs';
import * as child_process from 'child_process';
import * as path from 'path';

Просмотреть файл

@ -7,7 +7,7 @@
"es6"
],
"sourceMap": true,
"rootDir": "src",
"rootDir": ".",
"strict": true /* enable all strict type-checking options */
/* Additional Checks */
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
@ -17,5 +17,8 @@
"exclude": [
"node_modules",
".vscode-test"
],
"include": [
"**/*.ts"
]
}

Просмотреть файл

@ -1,15 +1,121 @@
{
"rules": {
"no-string-throw": true,
"no-unused-expression": true,
"no-duplicate-variable": true,
"curly": true,
"adjacent-overload-signatures": true,
"align": true,
"array-type": [true, "array"],
"arrow-return-shorthand": true,
"ban-comma-operator": true,
"binary-expression-operand-order": true,
"callable-types": true,
"class-name": true,
"semicolon": [
"comment-format": true,
"curly": true,
"encoding": true,
"eofline": true,
"ext-variable-name": [
true,
"always"
[
"class",
"pascal"
],
"triple-equals": true
[
"function",
"camel"
]
],
"file-header": [
true,
".*"
],
"import-spacing": true,
"indent": [
true,
"spaces",
4
],
"label-position": true,
"match-default-export-name": true,
"member-ordering": true,
"new-parens": true,
"no-arg": true,
"no-bitwise": true,
"no-boolean-literal-compare": true,
"no-conditional-assignment": true,
"no-consecutive-blank-lines": true,
"no-construct": true,
"no-debugger": true,
"no-default-export": true,
"no-duplicate-imports": true,
"no-duplicate-super": true,
"no-duplicate-switch-case": true,
"no-duplicate-variable": true,
"no-unused-expression-chai": true,
"no-eval": true,
"no-import-side-effect": true,
"no-internal-module": true,
"no-invalid-this": true,
"no-irregular-whitespace": true,
"no-mergeable-namespace": true,
"no-misused-new": true,
"no-namespace": true,
"no-non-null-assertion": true,
"no-redundant-jsdoc": true,
"no-reference": true,
"no-reference-import": true,
"no-return-await": true,
"no-sparse-arrays": true,
"no-switch-case-fall-through": true,
"no-this-assignment": true,
"no-trailing-whitespace": true,
"no-unnecessary-callback-wrapper": true,
"no-unnecessary-initializer": true,
"no-unnecessary-qualifier": true,
"no-unsafe-finally": true,
"no-unused-expression": true,
"no-unused-variable": true,
"no-var-keyword": true,
"no-var-requires": true,
"number-literal-format": true,
"one-line": [
true,
"check-catch",
"check-finally",
"check-else",
"check-open-brace",
"check-whitespace"
],
"one-variable-per-declaration": true,
"prefer-method-signature": true,
"prefer-object-spread": true,
"prefer-while": true,
"promise-must-complete": true,
"semicolon": true,
"space-within-parens": true,
"trailing-comma": true,
"triple-equals": true,
"type-literal-delimiter": true,
"typedef": [
true,
"variable-declaration",
"call-signature"
],
"typedef-whitespace": true,
"typeof-compare": true,
"unified-signatures": true,
"use-default-type-parameter": true,
"use-isnan": true,
"whitespace": [
true,
"check-branch",
"check-operator",
"check-separator",
"check-preblock",
"check-type"
]
},
"defaultSeverity": "warning"
"rulesDirectory": [
"node_modules/tslint-microsoft-contrib",
"node_modules/tslint-no-unused-expression-chai/rules",
"node_modules/vrsource-tslint-rules/rules"
]
}