diff --git a/.github/ISSUE_TEMPLATE b/.github/ISSUE_TEMPLATE new file mode 100644 index 0000000..82bc73f --- /dev/null +++ b/.github/ISSUE_TEMPLATE @@ -0,0 +1,35 @@ +Here are some things you should try before filing a bug report: + ++ This is for client side issues. For server side issues, report at [ccls](https://github.com/MaskRay/ccls) or [vscode-ccls](https://github.com/MaskRay/vscode-ccls). ++ Check https://github.com/MaskRay/ccls/wiki/Visual-Studio-Code ++ Check https://github.com/MaskRay/ccls/wiki/Debugging ++ Check [the FAQ](https://github.com/MaskRay/ccls/wiki/FAQ) to see if your issue is mentioned. + +If none of those help, remove this section and fill out the four sections in the template below. + +--- + +### Observed behavior + +Describe what happened. Any aids you can include (that you think could be relevant) are a tremendous help. + +* `compile_commands.json` or `.ccls` ([wiki/Project-Setup](https://github.com/MaskRay/ccls/wiki/Project-Setup)) +* Reduce to A minimal set of `.c` `.cc` `.h` `.hh` files that can still demonstrate the issue. +* Consider a screencast gif. + +### Expected behavior + +Describe what you expected to happen. + +### Steps to reproduce + +1. Select these example steps, +2. Delete them, +3. And replace them with precise steps to reproduce your issue. + +### System information + +* ccls version (`git describe --tags`): +* OS: +* Editor: +* vscode-ccls version (`git describe --tags`): diff --git a/.vscodeignore b/.vscodeignore index 9c93657..c8074bb 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -1,6 +1,7 @@ .vscode/** src/** +**/.* **/*.map -.gitignore -build.cmd -tsconfig.json \ No newline at end of file +**/*.ts +tsconfig.json +tslint.json diff --git a/README-dev.md b/README-dev.md deleted file mode 100644 index 1c83bb0..0000000 --- a/README-dev.md +++ /dev/null @@ -1,34 +0,0 @@ -# ccls - -This is the Visual Studio Code extension for ccls, which originates from cquery. - -The main ccls language server which powers this extension is found at -. - -# Building - -## Dependencies - -Make sure you have `npm` installed. - -## Build - -```bash -npm install -python build.py -``` - -Now, you can use vscode to install `out/ccls.vsix`. - -# Deploying - -To deploy a new release to the marketplace, simply run `publish.py` with a -clean working directory. By default a patch release is performed. - -```bash -python publish.py [patch|minor|major] -``` - -# LICENSE - -MIT diff --git a/README.md b/README.md index e37dafb..0c7b6ca 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,9 @@ # vscode-ccls -This is the Visual Studio Code extension for [ccls](https://github.com/MaskRay/ccls). - -![](https://ptpb.pw/ScXs.jpg) +This is the Visual Studio Code extension for [ccls](https://github.com/MaskRay/ccls), +a C/C++/ObjC language server supporting cross references, hierarchies, completion and semantic highlighting. See: -* [Getting started](https://github.com/MaskRay/ccls/wiki/Getting-started) -* [Visual Studio Code](https://github.com/MaskRay/ccls/wiki/Visual-Studio-Code) +* [ccls/wiki/Home](https://github.com/MaskRay/ccls/wiki/Home) +* [ccls/wiki/Visual Studio Code](https://github.com/MaskRay/ccls/wiki/Visual-Studio-Code) diff --git a/build.py b/build.py deleted file mode 100755 index 29c9136..0000000 --- a/build.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python - -import subprocess -import sys -from os.path import join - -if __name__ == "__main__": - OUT = 'out/ccls.vsix' - VSCE = 'vsce.cmd' if sys.platform == 'win32' else 'vsce' - VSCE = join('node_modules', '.bin', VSCE) - sys.exit(subprocess.call([VSCE, 'package', '-o', OUT])) diff --git a/package-lock.json b/package-lock.json index 0592ea4..9716281 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,70 +1,72 @@ { "name": "ccls", - "version": "0.1.19", + "version": "0.1.28", "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, "@types/node": { - "version": "9.6.41", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.41.tgz", - "integrity": "sha512-sPZWEbFMz6qAy9SLY7jh5cgepmsiwqUUHjvEm8lpU6kug2hmmcyuTnwhoGw/GWpI5Npue4EqvsiQQI0eWjW/ZA==", + "version": "9.6.52", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.52.tgz", + "integrity": "sha512-d6UdHtc8HKe3NTruj9mHk2B8EiHZyuG/00aYbUedHvy9sBhtLAX1gaxSNgvcheOvIZavvmpJYlwfHjjxlU/Few==", "dev": true }, - "ajv": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", - "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "@types/ws": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.3.tgz", + "integrity": "sha512-yBTM0P05Tx9iXGq00BbJPo37ox68R5vaGTXivs6RGh/BQ6QP5zqZDGWdAO6JbRE/iR1l80xeGAwCQS2nMV9S/w==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@types/node": "*" } }, - "ansi-cyan": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", - "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "dev": true, "requires": { - "ansi-wrap": "0.1.0" + "es6-promisify": "^5.0.0" } }, - "ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "ajv": { + "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": { - "ansi-wrap": "0.1.0" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true - }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "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": { - "buffer-equal": "^1.0.0" + "color-convert": "^1.9.0" } }, "argparse": { @@ -76,61 +78,6 @@ "sprintf-js": "~1.0.2" } }, - "arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", - "dev": true - }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -146,6 +93,11 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -164,36 +116,16 @@ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", "dev": true }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "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==", "dev": true, "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "os": "0.1.1", + "tunnel": "0.0.4", + "typed-rest-client": "1.2.0", + "underscore": "1.8.3" } }, "balanced-match": { @@ -211,15 +143,6 @@ "tweetnacl": "^0.14.3" } }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "~2.0.0" - } - }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -237,9 +160,9 @@ } }, "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": { @@ -248,12 +171,6 @@ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true }, - "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true - }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -281,77 +198,22 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "ansi-styles": { - "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" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "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" - } - } } }, "cheerio": { - "version": "1.0.0-rc.2", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", - "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", + "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==", "dev": true, "requires": { "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", + "dom-serializer": "~0.1.1", "entities": "~1.1.1", "htmlparser2": "^3.9.1", "lodash": "^4.15.0", "parse5": "^3.0.1" } }, - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "cloneable-readable": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", - "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -368,18 +230,18 @@ "dev": true }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "concat-map": { @@ -388,15 +250,6 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -416,9 +269,9 @@ } }, "css-what": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", - "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", "dev": true }, "dashdash": { @@ -439,24 +292,6 @@ "ms": "2.0.0" } }, - "deep-assign": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz", - "integrity": "sha1-sJJ0O+hCfcYh6gBnzex+cN0Z83s=", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -469,28 +304,26 @@ "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", "dev": true }, + "didyoumean": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz", + "integrity": "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=", + "dev": true + }, "diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", + "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", "dev": true }, "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", "dev": true, "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, "domelementtype": { @@ -518,24 +351,6 @@ "domelementtype": "1" } }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -546,21 +361,27 @@ "safer-buffer": "^2.1.0" } }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, "entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -574,41 +395,17 @@ "dev": true }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "event-stream": { - "version": "3.3.4", - "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "dev": true, - "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", - "dev": true, - "requires": { - "kind-of": "^1.1.0" - } - }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -636,16 +433,6 @@ "pend": "~1.2.0" } }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" - } - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -663,21 +450,10 @@ "mime-types": "^2.1.12" } }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - } + "fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" }, "fs.realpath": { "version": "1.0.0", @@ -685,24 +461,6 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -713,9 +471,9 @@ } }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "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", @@ -726,236 +484,12 @@ "path-is-absolute": "^1.0.0" } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, "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 }, - "gulp-chmod": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/gulp-chmod/-/gulp-chmod-2.0.0.tgz", - "integrity": "sha1-AMOQuSigeZslGsz2MaoJ4BzGKZw=", - "dev": true, - "requires": { - "deep-assign": "^1.0.0", - "stat-mode": "^0.2.0", - "through2": "^2.0.0" - } - }, - "gulp-filter": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.1.0.tgz", - "integrity": "sha1-oF4Rr/sHz33PQafeHLe2OsN4PnM=", - "dev": true, - "requires": { - "multimatch": "^2.0.0", - "plugin-error": "^0.1.2", - "streamfilter": "^1.0.5" - } - }, - "gulp-gunzip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulp-gunzip/-/gulp-gunzip-1.0.0.tgz", - "integrity": "sha1-FbdBFF6Dqcb1CIYkG1fMWHHxUak=", - "dev": true, - "requires": { - "through2": "~0.6.5", - "vinyl": "~0.4.6" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "gulp-remote-src-vscode": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/gulp-remote-src-vscode/-/gulp-remote-src-vscode-0.5.1.tgz", - "integrity": "sha512-mw4OGjtC/jlCWJFhbcAlel4YPvccChlpsl3JceNiB/DLJi24/UPxXt53/N26lgI3dknEqd4ErfdHrO8sJ5bATQ==", - "dev": true, - "requires": { - "event-stream": "3.3.4", - "node.extend": "^1.1.2", - "request": "^2.79.0", - "through2": "^2.0.3", - "vinyl": "^2.0.1" - }, - "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } - } - }, - "gulp-untar": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/gulp-untar/-/gulp-untar-0.0.7.tgz", - "integrity": "sha512-0QfbCH2a1k2qkTLWPqTX+QO4qNsHn3kC546YhAP3/n0h+nvtyGITDuDrYBMDZeW4WnFijmkOvBWa5HshTic1tw==", - "dev": true, - "requires": { - "event-stream": "~3.3.4", - "streamifier": "~0.1.1", - "tar": "^2.2.1", - "through2": "~2.0.3", - "vinyl": "^1.2.0" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } - } - } - }, - "gulp-vinyl-zip": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/gulp-vinyl-zip/-/gulp-vinyl-zip-2.1.2.tgz", - "integrity": "sha512-wJn09jsb8PyvUeyFF7y7ImEJqJwYy40BqL9GKfJs6UGpaGW9A+N68Q+ajsIpb9AeR6lAdjMbIdDPclIGo1/b7Q==", - "dev": true, - "requires": { - "event-stream": "3.3.4", - "queue": "^4.2.1", - "through2": "^2.0.3", - "vinyl": "^2.0.2", - "vinyl-fs": "^3.0.3", - "yauzl": "^2.2.1", - "yazl": "^2.2.1" - }, - "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } - } - }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -972,34 +506,10 @@ "har-schema": "^2.0.0" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.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 - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "he": { @@ -1009,30 +519,27 @@ "dev": true }, "htmlparser2": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz", - "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dev": true, "requires": { - "domelementtype": "^1.3.0", + "domelementtype": "^1.3.1", "domhandler": "^2.3.0", "domutils": "^1.5.1", "entities": "^1.1.1", "inherits": "^2.0.1", - "readable-stream": "^3.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.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", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "dev": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" } }, "http-signature": { @@ -1046,117 +553,36 @@ "sshpk": "^1.7.0" } }, - "inflight": { - "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=", - "dev": true - }, - "is": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", - "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", - "dev": true - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "agent-base": "^4.3.0", + "debug": "^3.1.0" } }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "unc-path-regex": "^0.1.2" + "once": "^1.3.0", + "wrappy": "1" } }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "isarray": { + "is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, "isstream": { @@ -1166,15 +592,15 @@ "dev": true }, "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -1199,12 +625,6 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -1223,49 +643,19 @@ "verror": "1.10.0" } }, - "kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", - "dev": true - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, - "lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", - "dev": true, - "requires": { - "flush-write-stream": "^1.0.2" - } - }, "linkify-it": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.1.0.tgz", - "integrity": "sha512-4REs8/062kV2DSHxNfq5183zrqXMl7WP0WzABH9IeJI+NLm429FgE1PDecltYfnOoFDFlZGh2T8PfZn0r+GTRg==", + "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==", "dev": true, "requires": { "uc.micro": "^1.0.1" } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "map-stream": { - "version": "0.1.0", - "resolved": "http://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, "markdown-it": { @@ -1294,18 +684,18 @@ "dev": true }, "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", "dev": true }, "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", "dev": true, "requires": { - "mime-db": "~1.37.0" + "mime-db": "1.40.0" } }, "minimatch": { @@ -1333,23 +723,36 @@ } }, "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.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", @@ -1363,6 +766,15 @@ "once": "^1.3.0", "path-is-absolute": "^1.0.0" } + }, + "supports-color": { + "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": "^3.0.0" + } } } }, @@ -1372,52 +784,12 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "multimatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", - "dev": true, - "requires": { - "array-differ": "^1.0.0", - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "minimatch": "^3.0.0" - } - }, "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "node.extend": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.8.tgz", - "integrity": "sha512-L/dvEBwyg3UowwqOUTyDsGBU6kjBQOpOhshio9V3i3BMPv5YUb9+mWNN8MK0IbWqT0AqaTSONZf0aTuMMahWgA==", - "dev": true, - "requires": { - "has": "^1.0.3", - "is": "^3.2.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "now-and-later": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz", - "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", - "dev": true, - "requires": { - "once": "^1.3.2" - } - }, "nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", @@ -1433,24 +805,6 @@ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, - "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", - "dev": true - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1460,14 +814,11 @@ "wrappy": "1" } }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } + "os": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/os/-/os-0.1.1.tgz", + "integrity": "sha1-IIhF6J4ZOtTZcUdLk5R3NqVtE/M=", + "dev": true }, "os-homedir": { "version": "1.0.2", @@ -1509,12 +860,6 @@ "@types/node": "*" } }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -1527,15 +872,6 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, - "requires": { - "through": "~2.3" - } - }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -1548,64 +884,18 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, - "plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", - "dev": true, - "requires": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" - } - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", + "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", "dev": true }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", @@ -1613,20 +903,11 @@ "dev": true }, "querystringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", - "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", "dev": true }, - "queue": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/queue/-/queue-4.5.1.tgz", - "integrity": "sha512-AMD7w5hRXcFSb8s9u38acBZ+309u6GsiibP4/0YacJeaurRshogB7v/ZcVPxP5gD5+zIw6ixRHdutiYUJfwKHw==", - "dev": true, - "requires": { - "inherits": "~2.0.0" - } - }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -1637,53 +918,16 @@ } }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - } - }, - "remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", "dev": true, "requires": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -1719,36 +963,18 @@ "dev": true }, "resolve": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.9.0.tgz", - "integrity": "sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", "dev": true, "requires": { "path-parse": "^1.0.6" } }, - "resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", - "dev": true, - "requires": { - "value-or-function": "^3.0.0" - } - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, "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": { @@ -1769,24 +995,15 @@ "dev": true }, "source-map-support": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", - "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", + "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", "source-map": "^0.6.0" } }, - "split": { - "version": "0.3.3", - "resolved": "http://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "dev": true, - "requires": { - "through": "2" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -1794,9 +1011,9 @@ "dev": true }, "sshpk": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz", - "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -1810,104 +1027,22 @@ "tweetnacl": "~0.14.0" } }, - "stat-mode": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", - "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", - "dev": true - }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "dev": true, - "requires": { - "duplexer": "~0.1.1" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "streamfilter": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.7.tgz", - "integrity": "sha512-Gk6KZM+yNA1JpW0KzlZIhjo3EaBJDkYfXtYSbOwNIQ7Zd6006E6+sCFlW1NDvFG/vnXhKmw6TJJgiEQg/8lXfQ==", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "streamifier": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz", - "integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8=", - "dev": true - }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "safe-buffer": "~5.2.0" } }, "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==", - "dev": true, - "requires": { - "has-flag": "^2.0.0" - } - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" + "has-flag": "^3.0.0" } }, "tmp": { @@ -1919,25 +1054,6 @@ "os-tmpdir": "~1.0.1" } }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - } - }, - "to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", - "dev": true, - "requires": { - "through2": "^2.0.3" - } - }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", @@ -1957,37 +1073,30 @@ } }, "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", "dev": true }, "tslint": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz", - "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.0.tgz", + "integrity": "sha512-2vqIvkMHbnx8acMogAERQ/IuINOq6DFqgF8/VDvhEkBqQh/x6SP0Y+OHnKth9/ZcHQSroOZwUQSN18v8KKF0/g==", "dev": true, "requires": { - "babel-code-frame": "^6.22.0", + "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", - "diff": "^3.2.0", + "diff": "^4.0.1", "glob": "^7.1.1", - "js-yaml": "^3.7.0", + "js-yaml": "^3.13.1", "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", - "tsutils": "^2.27.2" - }, - "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - } + "tsutils": "^2.29.0" } }, "tsutils": { @@ -2021,21 +1130,13 @@ "dev": true }, "typed-rest-client": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-0.9.0.tgz", - "integrity": "sha1-92jMDcP06VDwbgSCXDaz54NKofI=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.2.0.tgz", + "integrity": "sha512-FrUshzZ1yxH8YwGR29PWWnfksLEILbWJydU7zfIRkyH7kAEzB62uMAl2WY6EyolWpLpVHeJGgQm45/MaruaHpw==", "dev": true, "requires": { "tunnel": "0.0.4", "underscore": "1.8.3" - }, - "dependencies": { - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", - "dev": true - } } }, "typescript": { @@ -2045,33 +1146,17 @@ "dev": true }, "uc.micro": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.5.tgz", - "integrity": "sha512-JoLI4g5zv5qNyT09f4YAvEZIIV1oOjqnewYg5D38dkQljIzpPT296dbIGvKro3digYI1bkb7W6EP1y4uDlmzLg==", - "dev": true - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, "underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", "dev": true }, - "unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "requires": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -2088,12 +1173,12 @@ "dev": true }, "url-parse": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", - "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", "dev": true, "requires": { - "querystringify": "^2.0.0", + "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, @@ -2104,15 +1189,9 @@ "dev": true }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", + "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": { @@ -2126,131 +1205,18 @@ "extsprintf": "^1.2.0" } }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "^0.2.0", - "clone-stats": "^0.0.1" - } - }, - "vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } - } - }, - "vinyl-source-stream": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.2.tgz", - "integrity": "sha1-YrU6E1YQqJbpjKlr7jqH8Aio54A=", - "dev": true, - "requires": { - "through2": "^2.0.3", - "vinyl": "^0.4.3" - } - }, - "vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", - "dev": true, - "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } - } - }, "vsce": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.54.0.tgz", - "integrity": "sha512-E0Cnz50JK/TzUzTxDQ9oj3/Ichot1qmyin/8yHrH2BrQiXWUTX/FbuzMKFf1gTkNr6VvI3HbEf4VxSP/IASFIg==", + "version": "1.67.1", + "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.67.1.tgz", + "integrity": "sha512-Y/0fnfaLs2cCfytTGmy4Cp1bf9BaxHO7020YePdUwxjAlPlZ9+lm74M9yEFEWXTIug0L0sMax1WMz0TnozIqxg==", "dev": true, "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", @@ -2261,32 +1227,25 @@ "read": "^1.0.7", "semver": "^5.1.0", "tmp": "0.0.29", + "typed-rest-client": "1.2.0", "url-join": "^1.1.0", - "vso-node-api": "6.1.2-preview", "yauzl": "^2.3.1", "yazl": "^2.2.2" } }, "vscode": { - "version": "1.1.26", - "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.26.tgz", - "integrity": "sha512-z1Nf5J38gjUFbuDCbJHPN6OJ//5EG+e/yHlh6ERxj/U9B2Qc3aiHaFr38/fee/GGnxvRw/XegLMOG+UJwKi/Qg==", + "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", - "gulp-chmod": "^2.0.0", - "gulp-filter": "^5.0.1", - "gulp-gunzip": "1.0.0", - "gulp-remote-src-vscode": "^0.5.1", - "gulp-untar": "^0.0.7", - "gulp-vinyl-zip": "^2.1.2", - "mocha": "^4.0.1", + "mocha": "^5.2.0", "request": "^2.88.0", "semver": "^5.4.1", "source-map-support": "^0.5.0", - "url-parse": "^1.4.3", - "vinyl-fs": "^3.0.3", - "vinyl-source-stream": "^1.1.0" + "url-parse": "^1.4.4", + "vscode-test": "^0.4.1" } }, "vscode-jsonrpc": { @@ -2317,16 +1276,14 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz", "integrity": "sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A==" }, - "vso-node-api": { - "version": "6.1.2-preview", - "resolved": "https://registry.npmjs.org/vso-node-api/-/vso-node-api-6.1.2-preview.tgz", - "integrity": "sha1-qrNUbfJFHs2JTgcbuZtd8Zxfp48=", + "vscode-test": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.3.tgz", + "integrity": "sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w==", "dev": true, "requires": { - "q": "^1.0.1", - "tunnel": "0.0.4", - "typed-rest-client": "^0.9.0", - "underscore": "^1.8.3" + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1" } }, "wrappy": { @@ -2335,11 +1292,13 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "requires": { + "async-limiter": "~1.0.0" + } }, "yauzl": { "version": "2.10.0", diff --git a/package.json b/package.json index 1bbffcf..94e6c21 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "ccls", - "description": "C/C++/ObjC language server supporting cross references, hierarchies, completion and semantic highlighting", + "description": "C/C++/ObjC language server supporting cross references, hierarchies, completion and semantic highlight", "author": "ccls-project", "license": "MIT", - "version": "0.1.20", + "version": "0.1.29", "publisher": "ccls-project", "scripts": { "vscode:prepublish": "npm run lint && npm run compile", @@ -14,25 +14,29 @@ "lint": "npx tslint -p ./" }, "devDependencies": { - "@types/node": "^9.6.41", + "@types/node": "^9.6.52", + "@types/ws": "^6.0.3", + "tslint": "^5.20.0", "typescript": "^2.9.2", - "tslint": "^5.11.0", - "vsce": "^1.54.0", - "vscode": "^1.1.26" + "vsce": "^1.67.1", + "vscode": "^1.1.36" }, "dependencies": { - "vscode-languageclient": "^5.2.1" + "vscode-languageclient": "^5.2.1", + "ws": "^6.2.1", + "fs": "^0.0.1-security" }, "repository": { "type": "git", - "url": "https://github.com/MaskRay/vscode-ccls.git" + "url": "https://github.com/MaskRay/vscode-ccls" }, - "preview": true, "engines": { - "vscode": "^1.30.0" + "vscode": "^1.36.0" }, "categories": [ - "Programming Languages" + "Programming Languages", + "Linters", + "Snippets" ], "activationEvents": [ "onLanguage:c", @@ -56,6 +60,11 @@ "name": "Inheritance Hierarchy", "when": "extension.ccls.inheritanceHierarchyVisible" }, + { + "id": "ccls.dataFlowInto", + "name": "Data Flow Hierarchy", + "when": "extension.ccls.dataFlowHierarchyVisible" + }, { "id": "ccls.memberHierarchy", "name": "Member Hierarchy", @@ -89,6 +98,11 @@ "command": "ccls.base", "when": "resourceLangId == cpp", "group": "navigation@1.34" + }, + { + "command": "ccls.dataFlowInto", + "when": "resourceLangId == cpp", + "group": "navigation@1.35" } ], "view/title": [ @@ -107,6 +121,11 @@ "when": "view == ccls.callHierarchy", "group": "navigation" }, + { + "command": "ccls.closeDataFlowHierarchy", + "when": "view == ccls.dataFlowInto", + "group": "navigation" + }, { "command": "ccls.closeInheritanceHierarchy", "when": "view == ccls.inheritanceHierarchy", @@ -137,6 +156,10 @@ "command": "ccls.closeMemberHierarchy", "when": "false" }, + { + "command": "ccls.closeDataFlowHierarchy", + "when": "false" + }, { "command": "ccls.gotoForTreeView", "when": "false" @@ -229,6 +252,20 @@ "category": "ccls", "command": "ccls.vars" }, + { + "title": "Show Data Flow Into", + "category": "ccls", + "command": "ccls.dataFlowInto" + }, + { + "title": "Close", + "category": "ccls", + "command": "ccls.closeDataFlowHierarchy", + "icon": { + "light": "resources/close-light.svg", + "dark": "resources/close-dark.svg" + } + }, { "title": "Show Cross References", "category": "ccls", @@ -259,231 +296,120 @@ "default": [], "description": "Array containing extra arguments to pass to the ccls binary" }, - "ccls.cacheDirectory": { + "ccls.cache.directory": { "type": "string", "default": ".ccls-cache", "description": "Absolute or relative (from the project root) path to the directory that the cached index will be stored in. Try to have this directory on an SSD. If empty, cached indexes will not be saved on disk.\n\n${workspaceFolder} will be replaced by the folder where .vscode/settings.json resides.\n\nCache directories are project-wide, so this should be configured in the workspace settings so multiple indexes do not clash.\n\nExample value: \"/work/ccls-cache/chrome/\"" }, - "ccls.highlighting.enabled.types": { - "type": "boolean", - "default": false, - "description": "If semantic highlighting for classes, structs, and unions is enabled/disabled." - }, - "ccls.highlighting.enabled.freeStandingFunctions": { + "ccls.cache.hierarchicalPath": { "type": "boolean", "default": false, - "description": "If semantic highlighting for member functions is enabled/disabled." + "description": "If false, store cache files as $directory/@a@b/c.cc.blob\n\nIf true, $directory/a/b/c.cc.blob." }, - "ccls.highlighting.enabled.memberFunctions": { - "type": "boolean", - "default": false, - "description": "If semantic highlighting for member functions is enabled/disabled." - }, - "ccls.highlighting.enabled.freeStandingVariables": { - "type": "boolean", - "default": false, - "description": "If semantic highlighting for member free-standing variables is enabled/disabled." - }, - "ccls.highlighting.enabled.memberVariables": { - "type": "boolean", - "default": false, - "description": "If semantic highlighting for member variables is enabled/disabled." - }, - "ccls.highlighting.enabled.namespaces": { - "type": "boolean", - "default": false, - "description": "If semantic highlighting for namespaces is enabled/disabled." - }, - "ccls.highlighting.enabled.macros": { - "type": "boolean", - "default": false, - "description": "If semantic highlighting for macros is enabled/disabled." - }, - "ccls.highlighting.enabled.enums": { - "type": "boolean", - "default": false, - "description": "If semantic highlighting for enumerations is enabled/disabled." + "ccls.highlight.function.face": { + "type": "array", + "default": [] }, - "ccls.highlighting.enabled.typeAliases": { - "type": "boolean", - "default": false, - "description": "If semantic highlighting for type aliases is enabled/disabled." + "ccls.highlight.global.face": { + "type": "array", + "default": [ + "fontWeight: bolder" + ] }, - "ccls.highlighting.enabled.enumConstants": { - "type": "boolean", - "default": false, - "description": "If semantic highlighting for enumerators is enabled/disabled." + "ccls.highlight.member.face": { + "type": "array", + "default": [ + "fontStyle: italic" + ] }, - "ccls.highlighting.enabled.staticMemberFunctions": { - "type": "boolean", - "default": false, - "description": "If semantic highlighting for static member functions is enabled/disabled." + "ccls.highlight.static.face": { + "type": "array", + "default": [ + "fontWeight: bold" + ] }, - "ccls.highlighting.enabled.parameters": { - "type": "boolean", - "default": false, - "description": "If semantic highlighting for parameters is enabled/disabled." + "ccls.highlight.type.face": { + "type": "array", + "default": [] }, - "ccls.highlighting.enabled.templateParameters": { - "type": "boolean", - "default": false, - "description": "If semantic highlighting for template parameters is enabled/disabled." + "ccls.highlight.variable.face": { + "type": "array", + "default": [] }, - "ccls.highlighting.enabled.staticMemberVariables": { - "type": "boolean", - "default": false, - "description": "If semantic highlighting for static member variables is enabled/disabled." + "ccls.highlight.enum.face": { + "type": "array", + "default": [ + "variable", + "member" + ] }, - "ccls.highlighting.enabled.globalVariables": { - "type": "boolean", - "default": false, - "description": "If semantic highlighting for global variables is enabled/disabled." + "ccls.highlight.globalVariable.face": { + "type": "array", + "default": [ + "variable", + "global" + ] }, - "ccls.highlighting.colors.types": { + "ccls.highlight.macro.face": { "type": "array", "default": [ - "#e1afc3", - "#d533bb", - "#9b677f", - "#e350b6", - "#a04360", - "#dd82bc", - "#de3864", - "#ad3f87", - "#dd7a90", - "#e0438a" - ], - "description": "Colors to use for semantic highlighting. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlighting will cycle through them for successive symbols." + "variable" + ] }, - "ccls.highlighting.colors.freeStandingFunctions": { + "ccls.highlight.memberFunction.face": { "type": "array", "default": [ - "#e5b124", - "#927754", - "#eb992c", - "#e2bf8f", - "#d67c17", - "#88651e", - "#e4b953", - "#a36526", - "#b28927", - "#d69855" - ], - "description": "Colors to use for semantic highlighting. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlighting will cycle through them for successive symbols." + "function", + "member" + ] }, - "ccls.highlighting.colors.memberFunctions": { + "ccls.highlight.memberVariable.face": { "type": "array", "default": [ - "#e5b124", - "#927754", - "#eb992c", - "#e2bf8f", - "#d67c17", - "#88651e", - "#e4b953", - "#a36526", - "#b28927", - "#d69855" - ], - "description": "Colors to use for semantic highlighting. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlighting will cycle through them for successive symbols." + "variable", + "member" + ] }, - "ccls.highlighting.colors.freeStandingVariables": { + "ccls.highlight.namespace.face": { "type": "array", "default": [ - "#587d87", - "#26cdca", - "#397797", - "#57c2cc", - "#306b72", - "#6cbcdf", - "#368896", - "#3ea0d2", - "#48a5af", - "#7ca6b7" - ], - "description": "Colors to use for semantic highlighting. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlighting will cycle through them for successive symbols." + "type" + ] }, - "ccls.highlighting.colors.memberVariables": { + "ccls.highlight.parameter.face": { "type": "array", "default": [ - "#587d87", - "#26cdca", - "#397797", - "#57c2cc", - "#306b72", - "#6cbcdf", - "#368896", - "#3ea0d2", - "#48a5af", - "#7ca6b7" - ], - "description": "Colors to use for semantic highlighting. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlighting will cycle through them for successive symbols." + "variable" + ] }, - "ccls.highlighting.colors.namespaces": { + "ccls.highlight.staticMemberFunction.face": { "type": "array", "default": [ - "#429921", - "#58c1a4", - "#5ec648", - "#36815b", - "#83c65d", - "#417b2f", - "#43cc71", - "#7eb769", - "#58bf89", - "#3e9f4a" - ], - "description": "Colors to use for semantic highlighting. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlighting will cycle through them for successive symbols." + "function", + "static" + ] }, - "ccls.highlighting.colors.macros": { + "ccls.highlight.staticMemberVariable.face": { "type": "array", "default": [ - "#e79528", - "#c5373d", - "#e8a272", - "#d84f2b", - "#a67245", - "#e27a33", - "#9b4a31", - "#b66a1e", - "#e27a71", - "#cf6d49" - ], - "description": "Colors to use for semantic highlighting. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlighting will cycle through them for successive symbols." + "variable", + "static" + ] }, - "ccls.highlighting.colors.enums": { + "ccls.highlight.staticVariable.face": { "type": "array", "default": [ - "#e1afc3", - "#d533bb", - "#9b677f", - "#e350b6", - "#a04360", - "#dd82bc", - "#de3864", - "#ad3f87", - "#dd7a90", - "#e0438a" - ], - "description": "Colors to use for semantic highlighting. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlighting will cycle through them for successive symbols." + "variable", + "static" + ] }, - "ccls.highlighting.colors.typeAliases": { + "ccls.highlight.typeAlias.face": { "type": "array", "default": [ - "#e1afc3", - "#d533bb", - "#9b677f", - "#e350b6", - "#a04360", - "#dd82bc", - "#de3864", - "#ad3f87", - "#dd7a90", - "#e0438a" - ], - "description": "Colors to use for semantic highlighting. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlighting will cycle through them for successive symbols." + "type" + ] }, - "ccls.highlighting.colors.staticMemberFunctions": { + "ccls.highlight.function.colors": { "type": "array", "default": [ "#e5b124", @@ -497,41 +423,9 @@ "#b28927", "#d69855" ], - "description": "Colors to use for semantic highlighting. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlighting will cycle through them for successive symbols." - }, - "ccls.highlighting.colors.enumConstants": { - "type": "array", - "default": [ - "#587d87", - "#26cdca", - "#397797", - "#57c2cc", - "#306b72", - "#6cbcdf", - "#368896", - "#3ea0d2", - "#48a5af", - "#7ca6b7" - ], - "description": "Colors to use for semantic highlighting. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlighting will cycle through them for successive symbols." - }, - "ccls.highlighting.colors.parameters": { - "type": "array", - "default": [ - "#587d87", - "#26cdca", - "#397797", - "#57c2cc", - "#306b72", - "#6cbcdf", - "#368896", - "#3ea0d2", - "#48a5af", - "#7ca6b7" - ], - "description": "Colors to use for semantic highlighting. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlighting will cycle through them for successive symbols." + "description": "Colors to use for semantic highlight. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlight will cycle through them for successive symbols." }, - "ccls.highlighting.colors.templateParameters": { + "ccls.highlight.type.colors": { "type": "array", "default": [ "#e1afc3", @@ -545,9 +439,9 @@ "#dd7a90", "#e0438a" ], - "description": "Colors to use for semantic highlighting. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlighting will cycle through them for successive symbols." + "description": "Colors to use for semantic highlight. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlight will cycle through them for successive symbols." }, - "ccls.highlighting.colors.staticMemberVariables": { + "ccls.highlight.variable.colors": { "type": "array", "default": [ "#587d87", @@ -561,203 +455,39 @@ "#48a5af", "#7ca6b7" ], - "description": "Colors to use for semantic highlighting. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlighting will cycle through them for successive symbols." + "description": "Colors to use for semantic highlight. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlight will cycle through them for successive symbols." }, - "ccls.highlighting.colors.globalVariables": { + "ccls.highlight.namespace.colors": { "type": "array", "default": [ - "#587d87", - "#26cdca", - "#397797", - "#57c2cc", - "#306b72", - "#6cbcdf", - "#368896", - "#3ea0d2", - "#48a5af", - "#7ca6b7" + "#429921", + "#58c1a4", + "#5ec648", + "#36815b", + "#83c65d", + "#417b2f", + "#43cc71", + "#7eb769", + "#58bf89", + "#3e9f4a" ], - "description": "Colors to use for semantic highlighting. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlighting will cycle through them for successive symbols." - }, - "ccls.highlighting.underline.types": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.underline.freeStandingFunctions": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.underline.memberFunctions": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.underline.freeStandingVariables": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.underline.memberVariables": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.underline.namespaces": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.underline.macros": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.underline.enums": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.underline.typeAliases": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.underline.enumConstants": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.underline.staticMemberFunctions": { - "type": "boolean", - "default": true - }, - "ccls.highlighting.underline.parameters": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.underline.templateParameters": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.underline.staticMemberVariables": { - "type": "boolean", - "default": true - }, - "ccls.highlighting.underline.globalVariables": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.italic.types": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.italic.freeStandingFunctions": { - "type": "boolean", - "default": false + "description": "Colors to use for semantic highlight. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlight will cycle through them for successive symbols." }, - "ccls.highlighting.italic.memberFunctions": { - "type": "boolean", - "default": true - }, - "ccls.highlighting.italic.freeStandingVariables": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.italic.memberVariables": { - "type": "boolean", - "default": true - }, - "ccls.highlighting.italic.namespaces": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.italic.macros": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.italic.enums": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.italic.typeAliases": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.italic.enumConstants": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.italic.staticMemberFunctions": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.italic.parameters": { - "type": "boolean", - "default": true - }, - "ccls.highlighting.italic.templateParameters": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.italic.staticMemberVariables": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.italic.globalVariables": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.bold.types": { - "type": "boolean", - "default": true - }, - "ccls.highlighting.bold.freeStandingFunctions": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.bold.memberFunctions": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.bold.freeStandingVariables": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.bold.memberVariables": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.bold.namespaces": { - "type": "boolean", - "default": true - }, - "ccls.highlighting.bold.macros": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.bold.enums": { - "type": "boolean", - "default": true - }, - "ccls.highlighting.bold.typeAliases": { - "type": "boolean", - "default": true - }, - "ccls.highlighting.bold.enumConstants": { - "type": "boolean", - "default": true - }, - "ccls.highlighting.bold.staticMemberFunctions": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.bold.parameters": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.bold.templateParameters": { - "type": "boolean", - "default": true - }, - "ccls.highlighting.bold.staticMemberVariables": { - "type": "boolean", - "default": false - }, - "ccls.highlighting.bold.globalVariables": { - "type": "boolean", - "default": false + "ccls.highlight.macro.colors": { + "type": "array", + "default": [ + "#e79528", + "#c5373d", + "#e8a272", + "#d84f2b", + "#a67245", + "#e27a33", + "#9b4a31", + "#b66a1e", + "#e27a71", + "#cf6d49" + ], + "description": "Colors to use for semantic highlight. A good generator is http://tools.medialab.sciences-po.fr/iwanthue/. If multiple colors are specified, semantic highlight will cycle through them for successive symbols." }, "ccls.clang.extraArgs": { "type": "array", @@ -789,6 +519,11 @@ "default": "", "description": "Default value to use for clang -resource-dir argument. This will be automatically supplied by ccls if not provided." }, + "ccls.callHierarchy.qualified": { + "type": "boolean", + "default": true, + "description": "If true, use qualified names in the call hiearchy" + }, "ccls.misc.compilationDatabaseCommand": { "type": "string", "default": "", @@ -879,7 +614,7 @@ "null" ], "default": null, - "description": "Files that match these patterns won't have semantic highlighting." + "description": "Files that match these patterns won't have semantic highlight." }, "ccls.highlight.whitelist": { "type": [ @@ -887,7 +622,7 @@ "null" ], "default": null, - "description": "Files that match these patterns will have semantic highlighting." + "description": "Files that match these patterns will have semantic highlight." }, "ccls.highlight.largeFileSize": { "type": [ @@ -895,7 +630,7 @@ "null" ], "default": null, - "description": "Disable semantic highlighting for files larger than the size." + "description": "Disable semantic highlight for files larger than the size." }, "ccls.index.initialBlacklist": { "type": "array", @@ -927,6 +662,16 @@ "default": 2, "description": "Whether to reparse a file if write times of its dependencies have changed. The file will always be reparsed if its own write time changes.\n\n0: no, 1: only during initial load of project, 2: yes" }, + "ccls.index.maxInitializerLines": { + "type": "integer", + "default": 15, + "description": "Number of lines of the initializer / macro definition showed in hover." + }, + "ccls.index.reloadDatabaseOnChange": { + "type": "boolean", + "default": true, + "description": "Reload the compilation database when it is modified." + }, "ccls.codeLens.renderInline": { "type": "boolean", "default": false, @@ -980,12 +725,27 @@ "default": null, "description": "The maximum number of global search (ie, Ctrl+P + #foo) search results to report. For small search strings on large projects there can be a massive number of results (ie, over 1,000,000) so this limit is important to avoid extremely long delays. null means use the default value provided by the ccls language server." }, + "ccls.codeLens.enabled": { + "type": "boolean", + "default": true, + "description": "Specifies whether the references CodeLens should be shown." + }, "ccls.statusUpdateInterval": { "type": "integer", "default": 2000, "description": "Interval between updating ccls status in milliseconds. Set to 0 to disable." + }, + "ccls.trace.websocketEndpointUrl": { + "type": "string", + "default": "", + "description": "When set, logs all LSP messages to specified WebSocket endpoint." } } } + }, + "__metadata": { + "id": "8e21d425-1e30-4072-8436-786a9017e5c7", + "publisherDisplayName": "ccls-project", + "publisherId": "c8f976c9-da3f-47d4-a344-bc810b73caed" } } diff --git a/publish.py b/publish.py deleted file mode 100755 index 0f17b8d..0000000 --- a/publish.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python - -import subprocess -import sys - -if __name__ == "__main__": - # patch|minor|major - CMD = 'patch' - if len(sys.argv) > 1 and sys.argv[1]: - CMD = sys.argv[1] - - # patch | minor | major - if subprocess.call(['npm', 'version', CMD]) != 0: - sys.exit(1) - sys.exit(subprocess.call(['git', 'push', 'origin', 'master', '--follow-tags'])) - - diff --git a/src/hierarchies/callHierarchy.ts b/src/hierarchies/callHierarchy.ts index f94aec1..221348c 100644 --- a/src/hierarchies/callHierarchy.ts +++ b/src/hierarchies/callHierarchy.ts @@ -21,10 +21,9 @@ export class CallHierarchyProvider extends Hierarchy { private baseIcon: Icon; private derivedIcon: Icon; private useCallee = false; + private qualified = false; - constructor( - languageClient: LanguageClient - ) { + constructor(languageClient: LanguageClient, qualified: boolean) { super(languageClient, 'ccls.callHierarchy', 'ccls.closeCallHierarchy'); this.baseIcon = { dark: resourcePath("base-dark.svg"), @@ -34,6 +33,7 @@ export class CallHierarchyProvider extends Hierarchy { dark: resourcePath("derived-dark.svg"), light: resourcePath("derived-light.svg") }; + this.qualified = qualified; this._dispose.push(commands.registerCommand("ccls.call.useCallers", () => this.updateCallee(false))); this._dispose.push(commands.registerCommand("ccls.call.useCallees", () => this.updateCallee(true))); } @@ -46,33 +46,31 @@ export class CallHierarchyProvider extends Hierarchy { } protected async onGetChildren(element: CallHierarchyNode): Promise { - const result = await this.languageClient.sendRequest('$ccls/call', { - callType: CallType.All, - callee: this.useCallee, - hierarchy: true, - id: element.id, - levels: 1, - qualified: false, - }); + const result = + await this.languageClient.sendRequest('$ccls/call', { + callType: CallType.All, + callee: this.useCallee, + hierarchy: true, + id: element.id, + levels: 1, + qualified: this.qualified, + }); element.children = result.children; return result.children; } protected async onReveal(uri: Uri, position: Position): Promise { - return this.languageClient.sendRequest( - '$ccls/call', - { - callType: CallType.All, - callee: this.useCallee, - hierarchy: true, - levels: 2, - position, - qualified: false, - textDocument: { - uri: uri.toString(true), - }, - } - ); + return this.languageClient.sendRequest('$ccls/call', { + callType: CallType.All, + callee: this.useCallee, + hierarchy: true, + levels: 2, + position, + qualified: this.qualified, + textDocument: { + uri: uri.toString(true), + }, + }); } private updateCallee(val: boolean) { diff --git a/src/hierarchies/dataFlowHierarchy.ts b/src/hierarchies/dataFlowHierarchy.ts new file mode 100644 index 0000000..d8480d4 --- /dev/null +++ b/src/hierarchies/dataFlowHierarchy.ts @@ -0,0 +1,70 @@ +import { + commands, + Disposable, + Event, + EventEmitter, + Position, + Range, + TextEditor, + TreeDataProvider, + TreeItem, + TreeItemCollapsibleState, + Uri, + workspace +} from "vscode"; +import { LanguageClient } from "vscode-languageclient/lib/main"; +import { Icon, IHierarchyNode } from "../types"; +import { disposeAll, resourcePath, setContext } from "../utils"; +import { Hierarchy } from "./hierarchy"; + +interface DataFlowHierarchyNode extends IHierarchyNode { + children: DataFlowHierarchyNode[]; +} + +export class DataFlowHierarchyProvider extends Hierarchy { + protected contextValue = 'extension.ccls.dataFlowHierarchyVisible'; + private icon: Icon; + + constructor( + readonly languageClient: LanguageClient, + ) { + super(languageClient, 'ccls.dataFlowInto', 'ccls.closeDataFlowHierarchy'); + this.icon = { + dark: resourcePath("base-dark.svg"), + light: resourcePath("base-light.svg") + }; + } + + protected async onTreeItem(ti: TreeItem, element: DataFlowHierarchyNode) { + + const parentFile = await workspace.openTextDocument(Uri.parse(element.location.uri)); + ti.label = parentFile.getText( + new Range( + new Position(element.location.range.start.line, element.location.range.start.character), + new Position(element.location.range.end.line, element.location.range.end.character) + ) + ); + + ti.iconPath = this.icon; + ti.contextValue = 'cclsGoto'; + + } + + protected async onGetChildren( + element: DataFlowHierarchyNode + ): Promise { + return element.children; + } + + protected async onReveal(uri: Uri, position: Position): Promise { + return this.languageClient.sendRequest( + '$ccls/dataFlowInto', + { + position, + textDocument: { + uri: uri.toString(true), + }, + } + ); + } +} diff --git a/src/hierarchies/memberHierarchy.ts b/src/hierarchies/memberHierarchy.ts index bc207d1..77e0fb5 100644 --- a/src/hierarchies/memberHierarchy.ts +++ b/src/hierarchies/memberHierarchy.ts @@ -9,6 +9,7 @@ enum MemberKind { } interface MemberHierarchyNode extends IHierarchyNode { + fieldName: string; children: MemberHierarchyNode[]; } @@ -22,7 +23,20 @@ export class MemberHierarchyProvider extends Hierarchy { } public onTreeItem(ti: TreeItem, element: MemberHierarchyNode) { - // + const parts: string[] = element.fieldName.trim().split(' '); + const off: number = parseInt(parts[0], 10); + let fieldName: string = ''; + if (isNaN(off) || (parts.length < 3)) { + fieldName = parts[1]; + } else { + fieldName = parts[2]; + ti.tooltip = `Offset: ${off} bytes`; + } + + if (fieldName !== undefined) { + ti.label = fieldName; + ti.description = `(${element.name}) ` + ti.description; + } } protected async onGetChildren(element: MemberHierarchyNode): Promise { diff --git a/src/semantic.ts b/src/semantic.ts index 432c19c..ed01fe0 100644 --- a/src/semantic.ts +++ b/src/semantic.ts @@ -20,7 +20,6 @@ enum CclsSymbolKind { } enum StorageClass { - Invalid, None, Extern, Static, @@ -31,8 +30,8 @@ enum StorageClass { interface SemanticSymbol { readonly id: number; - readonly parentKind: SymbolKind; - readonly kind: SymbolKind; + readonly parentKind: SymbolKind|CclsSymbolKind; + readonly kind: SymbolKind|CclsSymbolKind; readonly isTypeMember: boolean; readonly storage: StorageClass; readonly lsRanges: Range[]; @@ -43,50 +42,23 @@ export interface PublishSemanticHighlightArgs { readonly symbols: SemanticSymbol[]; } -function makeSemanticDecorationType( - color: string|undefined, underline: boolean, italic: boolean, - bold: boolean): TextEditorDecorationType { - const opts: DecorationRenderOptions = {}; - opts.rangeBehavior = DecorationRangeBehavior.ClosedClosed; - opts.color = color; - if (underline === true) - opts.textDecoration = 'underline'; - if (italic === true) - opts.fontStyle = 'italic'; - if (bold === true) - opts.fontWeight = 'bold'; - return window.createTextEditorDecorationType( - opts as DecorationRenderOptions); -} - -export const semanticTypes: {[name: string]: Array} = { - enumConstants: [SymbolKind.EnumMember], - enums: [SymbolKind.Enum], - freeStandingFunctions: [SymbolKind.Function], - freeStandingVariables: [], - globalVariables: [], - macros: [CclsSymbolKind.Macro], - memberFunctions: [SymbolKind.Method, SymbolKind.Constructor], - memberVariables: [SymbolKind.Field], - namespaces: [SymbolKind.Namespace], - parameters: [CclsSymbolKind.Parameter], - staticMemberFunctions: [CclsSymbolKind.StaticMethod], - staticMemberVariables: [], - templateParameters: [SymbolKind.TypeParameter], - typeAliases: [CclsSymbolKind.TypeAlias], - types: [SymbolKind.Class, SymbolKind.Struct], -}; - -function makeDecorations(type: string) { - const config = workspace.getConfiguration('ccls'); - let colors = config.get(`highlighting.colors.${type}`, [undefined]); - if (colors.length === 0) - colors = [undefined]; - const u = config.get(`highlighting.underline.${type}`, false); - const i = config.get(`highlighting.italic.${type}`, false); - const b = config.get(`highlighting.bold.${type}`, false); - return colors.map((c) => makeSemanticDecorationType(c, u, i, b)); -} +export const semanticKinds: string[] = [ + 'function', + 'variable', + 'type', + + 'enum', + 'globalVariable', + 'macro', + 'memberFunction', + 'memberVariable', + 'namespace', + 'parameter', + 'staticMemberFunction', + 'staticMemberVariable', + 'staticVariable', + 'typeAlias', +]; // TODO: enable bold/italic decorators, might need change in vscode export class SemanticContext implements Disposable { @@ -96,11 +68,6 @@ export class SemanticContext implements Disposable { private _dispose: Disposable[] = []; public constructor() { - for (const type of Object.keys(semanticTypes)) { - this.semanticDecorations.set(type, makeDecorations(type)); - this.semanticEnabled.set(type, false); - } - this.updateConfigValues(); window.onDidChangeActiveTextEditor( @@ -119,8 +86,6 @@ export class SemanticContext implements Disposable { } public publishSemanticHighlight(args: PublishSemanticHighlightArgs) { - this.updateConfigValues(); - const normUri = normalizeUri(args.uri); for (const visibleEditor of window.visibleTextEditors) { @@ -150,10 +115,50 @@ export class SemanticContext implements Disposable { } private updateConfigValues() { - // Fetch new config instance, since vscode will cache the previous one. const config = workspace.getConfiguration('ccls'); - for (const [name, _value] of this.semanticEnabled) { - this.semanticEnabled.set(name, config.get(`highlighting.enabled.${name}`, false)); + + for (const kind of semanticKinds) { + const props: string[][] = []; + const face = config.get(`highlight.${kind}.face`, []); + let colors = config.get>(`highlight.${kind}.colors`, []); + let enabled = false; + + const stack: [string[], number][] = [[face, 0]]; + const visited = new Set([kind]); + while (stack.length > 0) { + const top = stack[stack.length - 1]; + if (top[1] >= top[0].length) { + stack.pop(); + continue; + } + const f = top[0][top[1]++]; + if (f === 'enabled') + enabled = true; + else if (f.indexOf(':') >= 0) + props.push(f.split(':')); + else { + if (visited.has(f)) + continue; + visited.add(f); + if (colors.length === 0) + colors = config.get>(`highlight.${f}.colors`, []); + const face1 = config.get(`highlight.${f}.face`); + if (face1 instanceof Array) + stack.push([face1 as string[], 0]); + } + } + this.semanticEnabled.set(kind, enabled); + + if (colors.length === 0) + colors = [undefined]; + this.semanticDecorations.set(kind, colors.map((color) => { + const opt: DecorationRenderOptions = {}; + opt.rangeBehavior = DecorationRangeBehavior.ClosedClosed; + opt.color = color; + for (const prop of props) + (opt as any)[prop[0]] = prop[1].trim(); + return window.createTextEditorDecorationType(opt as DecorationRenderOptions); + })); } } @@ -167,25 +172,45 @@ export class SemanticContext implements Disposable { return decorations[symbol.id % decorations.length]; }; - if (symbol.kind === SymbolKind.Variable) { - if (symbol.parentKind === SymbolKind.Function || - symbol.parentKind === SymbolKind.Method || - symbol.parentKind === SymbolKind.Constructor) { - return get('freeStandingVariables'); - } - return get('globalVariables'); - } else if (symbol.kind === SymbolKind.Field) { - if (symbol.storage === StorageClass.Static) { - return get('staticMemberVariables'); - } - return get('memberVariables'); - } else { - for (const name of Object.keys(semanticTypes)) { - const kinds = semanticTypes[name]; - if (kinds.some((e) => e === symbol.kind)) { - return get(name); - } - } + switch (symbol.kind) { + // Functions + case SymbolKind.Method: + case SymbolKind.Constructor: + return get('memberFunction'); + case SymbolKind.Function: + return get('function'); + case CclsSymbolKind.StaticMethod: + return get('staticMemberFunction'); + + // Types + case SymbolKind.Namespace: + return get('namespace'); + case SymbolKind.Class: + case SymbolKind.Struct: + case SymbolKind.Enum: + case SymbolKind.TypeParameter: + return get('type'); + case CclsSymbolKind.TypeAlias: + return get('typeAlias'); + + // Variables + case SymbolKind.Field: + if (symbol.storage === StorageClass.Static) + return get('staticMemberVariable'); + return get('memberVariable'); + case SymbolKind.Variable: + if (symbol.storage === StorageClass.Static) + return get('staticVariable'); + if (symbol.parentKind === SymbolKind.File || + symbol.parentKind === SymbolKind.Namespace) + return get('globalVariable'); + return get('variable'); + case SymbolKind.EnumMember: + return get('enum'); + case CclsSymbolKind.Parameter: + return get('parameter'); + case CclsSymbolKind.Macro: + return get('macro'); } } diff --git a/src/serverContext.ts b/src/serverContext.ts index 8bf9a6e..a9aba32 100644 --- a/src/serverContext.ts +++ b/src/serverContext.ts @@ -1,4 +1,5 @@ import * as cp from "child_process"; +import * as fs from 'fs'; import { CancellationToken, CodeLens, @@ -16,6 +17,7 @@ import { Uri, window, workspace, + WorkspaceConfiguration, } from "vscode"; import { LanguageClient, @@ -26,13 +28,15 @@ import { } from "vscode-languageclient"; import { Converter } from "vscode-languageclient/lib/protocolConverter"; import * as ls from "vscode-languageserver-types"; +import * as WebSocket from 'ws'; import { CclsErrorHandler } from "./cclsErrorHandler"; import { cclsChan, logChan } from './globalContext'; import { CallHierarchyProvider } from "./hierarchies/callHierarchy"; +import { DataFlowHierarchyProvider } from "./hierarchies/dataFlowHierarchy"; import { InheritanceHierarchyProvider } from "./hierarchies/inheritanceHierarchy"; import { MemberHierarchyProvider } from "./hierarchies/memberHierarchy"; import { InactiveRegionsProvider } from "./inactiveRegions"; -import { PublishSemanticHighlightArgs, SemanticContext, semanticTypes } from "./semantic"; +import { PublishSemanticHighlightArgs, SemanticContext, semanticKinds } from "./semantic"; import { StatusBarIconProvider } from "./statusBarIcon"; import { ClientConfig, IHierarchyNode } from './types'; import { disposeAll, normalizeUri, unwrap, wait } from "./utils"; @@ -75,12 +79,11 @@ function flatObject(obj: any, pref = ""): Map { } function getClientConfig(wsRoot: string): ClientConfig { - const kCacheDirPrefName = 'cacheDirectory'; - function hasAnySemanticHighlight() { - const hlconfig = workspace.getConfiguration('ccls.highlighting.enabled'); - for (const name of Object.keys(semanticTypes)) { - if (hlconfig.get(name, false)) + const config = workspace.getConfiguration('ccls'); + for (const kind of semanticKinds) { + const face = config.get(`highlight.${kind}.face`, []); + if (face.length > 0) return true; } return false; @@ -104,80 +107,82 @@ function getClientConfig(wsRoot: string): ClientConfig { return value; } - // Read prefs; this map goes from `ccls/js name` => `vscode prefs name`. - const configMapping: Array<[string, string]> = [ - ['launchCommand', 'launch.command'], - ['launchArgs', 'launch.args'], - ['cacheDirectory', kCacheDirPrefName], - ['compilationDatabaseCommand', 'misc.compilationDatabaseCommand'], - ['compilationDatabaseDirectory', 'misc.compilationDatabaseDirectory'], - ['clang.excludeArgs', 'clang.excludeArgs'], - ['clang.extraArgs', 'clang.extraArgs'], - ['clang.pathMappings', 'clang.pathMappings'], - ['clang.resourceDir', 'clang.resourceDir'], - ['codeLens.localVariables', 'codeLens.localVariables'], - ['completion.caseSensitivity', 'completion.caseSensitivity'], - ['completion.detailedLabel', 'completion.detailedLabel'], - ['completion.duplicateOptional', 'completion.duplicateOptional'], - ['completion.filterAndSort', 'completion.filterAndSort'], - ['completion.include.maxPathSize', 'completion.include.maxPathSize'], - ['completion.include.suffixWhitelist', 'completion.include.suffixWhitelist'], - ['completion.include.whitelist', 'completion.include.whitelist'], - ['completion.include.blacklist', 'completion.include.blacklist'], - ['client.snippetSupport', 'completion.enableSnippetInsertion'], - ['diagnostics.blacklist', 'diagnostics.blacklist'], - ['diagnostics.whitelist', 'diagnostics.whitelist'], - ['diagnostics.onChange', 'diagnostics.onChange'], - ['diagnostics.onOpen', 'diagnostics.onOpen'], - ['diagnostics.onSave', 'diagnostics.onSave'], - ['diagnostics.spellChecking', 'diagnostics.spellChecking'], - ['highlight.blacklist', 'highlight.blacklist'], - ['highlight.whitelist', 'highlight.whitelist'], - ['largeFileSize', 'highlight.largeFileSize'], - ['index.whitelist', 'index.whitelist'], - ['index.blacklist', 'index.blacklist'], - ['index.initialWhitelist', 'index.initialWhitelist'], - ['index.initialBlacklist', 'index.initialBlacklist'], - ['index.multiVersion', 'index.multiVersion'], - ['index.onChange', 'index.onChange'], - ['index.threads', 'index.threads'], - ['workspaceSymbol.maxNum', 'workspaceSymbol.maxNum'], - ['workspaceSymbol.caseSensitivity', 'workspaceSymbol.caseSensitivity'], - ['statusUpdateInterval', 'statusUpdateInterval'], - ]; - const castBooleanToInteger: string[] = []; - const clientConfig: ClientConfig = { - cacheDirectory: '.ccls-cache', - highlight: { - enabled: hasAnySemanticHighlight(), - lsRanges: true, - }, - launchArgs: [] as string[], - launchCommand: '', - statusUpdateInterval: 0, - workspaceSymbol: { - sort: false, - }, - }; - const config = workspace.getConfiguration('ccls'); - for (const prop of configMapping) { - let value = config.get(prop[1]); + function setConfig(config: ClientConfig, dottedName: string, value: any) { if (value != null) { - const subprops = prop[0].split('.'); - let subconfig = clientConfig; + const subprops = dottedName.split('.'); + let subconfig = config; for (const subprop of subprops.slice(0, subprops.length - 1)) { if (!subconfig.hasOwnProperty(subprop)) { subconfig[subprop] = {}; } subconfig = subconfig[subprop]; } - if (castBooleanToInteger.includes(prop[1])) { - value = +value; - } subconfig[subprops[subprops.length - 1]] = resolveVariables(value); } } + function setClientConfigFromWorkspaceConfig( + cliConfig: ClientConfig, + workspaceConfig: WorkspaceConfiguration, + mapping: Map, + blacklist: Set + ) { + function recurse(config: WorkspaceConfiguration, parentPath = '') { + for (const key of Object.keys(config)) { + const value = config[key]; + const currentPath = (parentPath ? parentPath + '.' : '') + key; + if (blacklist.has(currentPath) || typeof value === 'function') { + continue; + } + if (typeof value === 'object' && value !== null && !(value instanceof Array)) { + recurse(value, currentPath); + } else { + setConfig(cliConfig, mapping.get(currentPath) || currentPath, value); + } + } + } + recurse(workspaceConfig); + } + + // Read prefs; this map goes from `vscode prefs name` => `ccls/js name`. + // For flags which have different name between vscode-ccls prefs and + // ClientConfig / ccls initializationOption + const configMapping = new Map([ + ['launch.command', 'launchCommand'], + ['launch.args', 'launchArgs'], + ['misc.compilationDatabaseCommand', 'compilationDatabaseCommand'], + ['misc.compilationDatabaseDirectory', 'compilationDatabaseDirectory'], + ['completion.enableSnippetInsertion', 'client.snippetSupport'], + ['callHierarchy.qualified', 'callHiearchyQualified'], + ]); + // For flags which should not be populated in ClientConfig (used only by other parts of vscode-ccls) + // It seems like ccls happily ignores extra keys in initializationOption so this is not required. + const configBlacklist = new Set([ + 'codeLens.enabled', + 'codeLens.renderInline', + 'highlight', + 'misc.showInactiveRegions', + 'theme', + 'trace', + 'treeViews', + ]); + const clientConfig: ClientConfig = { + callHiearchyQualified: false, + highlight: { + blacklist: hasAnySemanticHighlight() ? [] : ['.*'], + lsRanges: true, + }, + launchArgs: [] as string[], + launchCommand: '', + statusUpdateInterval: 0, + traceEndpoint: '', + }; + setClientConfigFromWorkspaceConfig( + clientConfig, + workspace.getConfiguration('ccls'), + configMapping, + configBlacklist + ); return clientConfig; } @@ -250,7 +255,9 @@ export class ServerContext implements Disposable { "ccls.inheritanceHierarchy", inheritanceHierarchyProvider )); - const callHierarchyProvider = new CallHierarchyProvider(this.client); + const callHiearchyQualified = this.cliConfig.callHiearchyQualified; + const callHierarchyProvider = + new CallHierarchyProvider(this.client, callHiearchyQualified); this._dispose.push(callHierarchyProvider); this._dispose.push(window.registerTreeDataProvider( 'ccls.callHierarchy', callHierarchyProvider @@ -262,6 +269,12 @@ export class ServerContext implements Disposable { 'ccls.memberHierarchy', memberHierarchyProvider )); + const dfProvier = new DataFlowHierarchyProvider(this.client); + this._dispose.push(dfProvier); + this._dispose.push(window.registerTreeDataProvider( + 'ccls.dataFlowInto', dfProvier + )); + // Common between tree views. this._dispose.push(commands.registerCommand( "ccls.gotoForTreeView", this.gotoForTreeView, this @@ -270,7 +283,7 @@ export class ServerContext implements Disposable { "ccls.hackGotoForTreeView", this.hackGotoForTreeView, this )); - // Semantic highlighting + // Semantic highlight const semantic = new SemanticContext(); this._dispose.push(semantic); this.client.onNotification('$ccls/publishSemanticHighlight', @@ -287,6 +300,21 @@ export class ServerContext implements Disposable { } this._dispose.push(commands.registerCommand("ccls.reload", this.reloadIndex, this)); + + if (config.get('index.reloadDatabaseOnChange', true)) { + let db_dir = config.get('misc.compilationDatabaseDirectory'); + if (!db_dir || db_dir === '') + db_dir = this.cwd; + const db_path = db_dir + '/compile_commands.json'; + // resolve db_path in case it is a symlink, otherwise the file system watcher + // won't catch modifications of the linked file + const db_real_path = fs.realpathSync(db_path); + const db_watcher = workspace.createFileSystemWatcher(db_real_path, false, false, false); + this._dispose.push(db_watcher); + db_watcher.onDidChange((e: Uri) => { + this.client.sendNotification("workspace/didChangeConfiguration"); + }); + } } public async stop() { @@ -308,7 +336,8 @@ export class ServerContext implements Disposable { } private reloadIndex() { - this.client.sendNotification("$ccls/reload"); + this.client.sendNotification( + '$ccls/reload', {blacklist: [], dependencies: true, whilelist: []}); } private async onDidChangeConfiguration() { @@ -338,10 +367,10 @@ export class ServerContext implements Disposable { token: CancellationToken, next: ProvideCodeLensesSignature ): Promise { - const enableCodeLens = workspace.getConfiguration(undefined, null).get('editor.codeLens'); + const config = workspace.getConfiguration('ccls'); + const enableCodeLens = config.get('codeLens.enabled'); if (!enableCodeLens) return []; - const config = workspace.getConfiguration('ccls'); const enableInlineCodeLens = config.get('codeLens.renderInline', false); if (!enableInlineCodeLens) { const uri = document.uri; @@ -428,39 +457,22 @@ export class ServerContext implements Disposable { private initClient(): LanguageClient { const args = this.cliConfig.launchArgs; - const env: any = {}; - const kToForward = [ - 'ProgramData', - 'PATH', - 'CPATH', - 'LIBRARY_PATH', - ]; - for (const e of kToForward) - env[e] = process.env[e]; - const serverOptions: ServerOptions = async (): Promise => { - const opts: cp.SpawnOptions = { - cwd: this.cwd, - env - }; - const child = cp.spawn( - this.cliConfig.launchCommand, - args, - opts - ); + const child = cp.spawn(this.cliConfig.launchCommand, args); this.clientPid = child.pid; return child; }; + const config = workspace.getConfiguration('ccls'); // Options to control the language client const clientOptions: LanguageClientOptions = { diagnosticCollectionName: 'ccls', documentSelector: ['c', 'cpp', 'objective-c', 'objective-cpp'], // synchronize: { // configurationSection: 'ccls', - // fileEvents: workspace.createFileSystemWatcher('**/.cc') + // fileEvents: workspace.createfsWatcher('**/.cc') // }, - errorHandler: new CclsErrorHandler(workspace.getConfiguration('ccls')), + errorHandler: new CclsErrorHandler(config), initializationFailedHandler: (e) => { console.log(e); return false; @@ -471,6 +483,29 @@ export class ServerContext implements Disposable { revealOutputChannelOn: RevealOutputChannelOn.Never, }; + const traceEndpoint = config.get('trace.websocketEndpointUrl'); + if (traceEndpoint) { + const socket = new WebSocket(traceEndpoint); + let log = ''; + clientOptions.outputChannel = { + name: 'websocket', + append(value: string) { + log += value; + }, + appendLine(value: string) { + log += value; + if (socket && socket.readyState === WebSocket.OPEN) { + socket.send(log); + } + log = ''; + }, + clear() {/**/}, + show() {/**/}, + hide() {/**/}, + dispose() { socket.close(); } + }; + } + // Create the language client and start the client. return new LanguageClient('ccls', 'ccls', serverOptions, clientOptions); } diff --git a/src/types.ts b/src/types.ts index e04656b..c94c611 100644 --- a/src/types.ts +++ b/src/types.ts @@ -7,17 +7,14 @@ export interface Icon { } export interface ClientConfig { - cacheDirectory: string; highlight: { - enabled: boolean; + blacklist: string[]; lsRanges: boolean; }; launchArgs: string[]; launchCommand: string; - workspaceSymbol: { - sort: boolean, - }; statusUpdateInterval: number; + traceEndpoint: string; [key: string]: any; }