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:
Родитель
7e2a568b47
Коммит
b256a6624b
|
@ -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
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "mycompile",
|
||||
"type": "npm",
|
||||
"script": "mycompile",
|
||||
"problemMatcher": [
|
||||
"$tsc-watch"
|
||||
],
|
||||
"isBackground": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
21
package.json
21
package.json
|
@ -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);
|
||||
}
|
||||
|
|
27
src/make.ts
27
src/make.ts
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
128
src/parser.ts
128
src/parser.ts
|
@ -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"
|
||||
]
|
||||
}
|
||||
|
|
122
tslint.json
122
tslint.json
|
@ -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"
|
||||
]
|
||||
}
|
Загрузка…
Ссылка в новой задаче