microsoft / vscode-typescript-tslint-plugin

VS Code extension that provides TSLint support using the typescript-tslint-plugin
https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-typescript-tslint-plugin
MIT License
188 stars 34 forks source link

More clear usage instructions about using with VS Code's version of typescript #41

Closed mikeyhew closed 5 years ago

mikeyhew commented 5 years ago

The usage instructions say the following:

This extension works using VS Code's built-in version of TypeScript and a local or global install of tslint. You do not need to configure the plugin in your tsconfig.json if you are using VS Code's version of TypeScript.

Presumably, this means that there is some way to get TSLint working in VS Code without installing typescript, tslint, and typescript-tslint-plugin locally and switching from VS Code's version of typescript to the workspace version. It sounds like all you need to do is npm install -g typescript tslint and tslint --init, and then when you open up a *.ts file in your workspace and do something to trigger a TSLint warning, you'll see warnings. But I can't seem to get that to work.

This is what I've tried:

npm install -g typescript tslint
mkdir foo
cd foo
tslint --init # generates a tslint.json file that extends tslint:recommended
echo "console.log('Hello, World')" >foo.ts
code .

Then open up foo.ts in the editor. If you do all that, you should see these typescript warnings, which are output when I run tslint -c tslint.json foo.ts:

ERROR: foo.ts:1:1 - Calls to 'console.log' are not allowed.
ERROR: foo.ts:1:13 - ' should be "
ERROR: foo.ts:1:28 - Missing semicolon

However, nothing shows up in the editor. What step am I missing? Or is it not possible to use this plugin without using a workspace version of typescript? In any case, the usage instructions should be updated to make it clear exactly what you need to do to get it working.

mjbvz commented 5 years ago

What VS Code version are you using? Did you configure typescript.tsdk as a user setting?

mikeyhew commented 5 years ago

@mjbvz 1.30.2 on macOS. No, I do not have typescript.tsdk as a user or workspace setting.

mjbvz commented 5 years ago

Running that script works for me:

screen shot 2019-01-23 at 3 25 13 pm

Can you collect the TS server log to see why the tslint plugin is not being loaded:

  1. Set "typescript.tsserver.log": "verbose",
  2. Restart VS Code and reproduce the problem
  3. In VS Code, run the TypeScript: Open TS Server log command
  4. This should open a folder with a tsserver.log file in it

Please share this log on your empty workspace

mikeyhew commented 5 years ago

@mjbvz I assume you don't want an empty workspace, but the workspace created by the script. Heres is the log output:

tsserver.log contents Info 0 [18:33:46.813] Starting TS Server Info 1 [18:33:46.814] Version: 3.2.2 Info 2 [18:33:46.814] Arguments: /Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper.app/Contents/MacOS/Code Helper /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js --useInferredProjectPerProjectRoot --enableTelemetry --cancellationPipeName /var/folders/lk/kgsvgr293l94fhdbnvk1mjx00000gn/T/vscode-typescript/tscancellation-7ad8a646c5cab4d9060c.tmp* --logVerbosity verbose --logFile /Users/mikeyhew/Library/Application Support/Code/logs/20190123T181126/exthost6/vscode.typescript-language-features/tsserver-log-3uSjVc/tsserver.log --locale en --noGetErrOnBackgroundUpdate Info 3 [18:33:46.814] Platform: darwin NodeVersion: 8 CaseSensitive: false Info 4 [18:33:46.824] Binding... Info 5 [18:33:46.830] request: {"seq":0,"type":"request","command":"configure","arguments":{"hostInfo":"vscode"}} Info 6 [18:33:46.831] Host information vscode Info 7 [18:33:46.831] response: {"seq":0,"type":"response","command":"configure","request_seq":0,"success":true} Perf 8 [18:33:46.832] 0::configure: async elapsed time (in milliseconds) 1.8330 Info 9 [18:33:46.832] request: {"seq":1,"type":"request","command":"compilerOptionsForInferredProjects","arguments":{"options":{"module":"commonjs","target":"es2016","jsx":"preserve","allowJs":true,"allowSyntheticDefaultImports":true,"allowNonTsExtensions":true}}} Info 10 [18:33:46.833] Scheduled: *ensureProjectForOpenFiles* Perf 11 [18:33:46.833] 1::compilerOptionsForInferredProjects: elapsed time (in milliseconds) 0.9271 Info 12 [18:33:46.833] response: {"seq":0,"type":"response","command":"compilerOptionsForInferredProjects","request_seq":1,"success":true,"body":true} Info 13 [18:33:46.833] request: {"seq":2,"type":"request","command":"open","arguments":{"file":"/Users/mikeyhew/Desktop/foo/foo.ts","fileContent":"console.log('Hello, World')\n","scriptKindName":"TS","projectRootPath":"/Users/mikeyhew/Desktop/foo"}} Info 14 [18:33:46.835] Search path: /Users/mikeyhew/Desktop/foo Info 15 [18:33:46.835] ConfigFilePresence:: Current Watches: :: File: /Users/mikeyhew/Desktop/foo/tsconfig.json Currently impacted open files: RootsOfInferredProjects: OtherOpenFiles: /Users/mikeyhew/Desktop/foo/foo.ts Status: File added to open files impacted by this config file Info 16 [18:33:46.836] ConfigFilePresence:: Current Watches: :: File: /Users/mikeyhew/Desktop/foo/jsconfig.json Currently impacted open files: RootsOfInferredProjects: OtherOpenFiles: /Users/mikeyhew/Desktop/foo/foo.ts Status: File added to open files impacted by this config file Info 17 [18:33:46.836] For info: /Users/mikeyhew/Desktop/foo/foo.ts :: No config files found. Info 18 [18:33:46.840] ConfigFilePresence:: Current Watches: :: File: /Users/mikeyhew/Desktop/foo/tsconfig.json Currently impacted open files: RootsOfInferredProjects: /Users/mikeyhew/Desktop/foo/foo.ts OtherOpenFiles: Status: Open file was set as Inferred root Info 19 [18:33:46.840] FileWatcher:: Added:: WatchInfo: /Users/mikeyhew/Desktop/foo/tsconfig.json 2000 Project: WatchType: Config file for the inferred project root Info 20 [18:33:46.841] ConfigFilePresence:: Current Watches: Config file for the inferred project root:: File: /Users/mikeyhew/Desktop/foo/tsconfig.json Currently impacted open files: RootsOfInferredProjects: /Users/mikeyhew/Desktop/foo/foo.ts OtherOpenFiles: Status: Updated the callback Info 21 [18:33:46.841] ConfigFilePresence:: Current Watches: :: File: /Users/mikeyhew/Desktop/foo/jsconfig.json Currently impacted open files: RootsOfInferredProjects: /Users/mikeyhew/Desktop/foo/foo.ts OtherOpenFiles: Status: Open file was set as Inferred root Info 22 [18:33:46.841] FileWatcher:: Added:: WatchInfo: /Users/mikeyhew/Desktop/foo/jsconfig.json 2000 Project: WatchType: Config file for the inferred project root Info 23 [18:33:46.841] ConfigFilePresence:: Current Watches: Config file for the inferred project root:: File: /Users/mikeyhew/Desktop/foo/jsconfig.json Currently impacted open files: RootsOfInferredProjects: /Users/mikeyhew/Desktop/foo/foo.ts OtherOpenFiles: Status: Updated the callback Info 24 [18:33:46.842] Starting updateGraphWorker: Project: /dev/null/inferredProject1* Info 25 [18:33:46.861] DirectoryWatcher:: Added:: WatchInfo: /applications/visual studio code.app/contents/resources/app/extensions/node_modules 1 Project: WatchType: node_modules for closed script infos in them Info 26 [18:33:46.863] Elapsed:: 2ms DirectoryWatcher:: Added:: WatchInfo: /applications/visual studio code.app/contents/resources/app/extensions/node_modules 1 Project: WatchType: node_modules for closed script infos in them Info 27 [18:33:47.652] DirectoryWatcher:: Added:: WatchInfo: /Users/mikeyhew/Desktop/foo/node_modules/@types 1 Project: /dev/null/inferredProject1* WatchType: Type root directory Info 28 [18:33:47.653] Elapsed:: 1ms DirectoryWatcher:: Added:: WatchInfo: /Users/mikeyhew/Desktop/foo/node_modules/@types 1 Project: /dev/null/inferredProject1* WatchType: Type root directory Info 29 [18:33:47.653] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* Version: 1 structureChanged: true Elapsed: 811ms Info 30 [18:33:47.654] Project '/dev/null/inferredProject1*' (Inferred) 0 Info 30 [18:33:47.655] Files (19) /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es5.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2016.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.dom.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.dom.iterable.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.webworker.importscripts.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.scripthost.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.core.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.collection.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.generator.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.iterable.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.promise.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.proxy.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.reflect.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.symbol.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2016.array.include.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2016.full.d.ts /Users/mikeyhew/Desktop/foo/foo.ts Info 30 [18:33:47.655] ----------------------------------------------- Info 30 [18:33:47.655] Open files: Info 30 [18:33:47.655] FileName: /Users/mikeyhew/Desktop/foo/foo.ts ProjectRootPath: /Users/mikeyhew/Desktop/foo Info 30 [18:33:47.655] Projects: /dev/null/inferredProject1* Perf 30 [18:33:47.655] 2::open: async elapsed time (in milliseconds) 821.6213 Info 31 [18:33:47.655] request: {"seq":3,"type":"request","command":"getOutliningSpans","arguments":{"file":"/Users/mikeyhew/Desktop/foo/foo.ts"}} Perf 32 [18:33:47.659] 3::getOutliningSpans: elapsed time (in milliseconds) 3.7454 Info 33 [18:33:47.659] response: {"seq":0,"type":"response","command":"getOutliningSpans","request_seq":3,"success":true,"body":[]} Info 34 [18:33:47.660] event: {"seq":0,"type":"event","event":"typingsInstallerPid","body":{"pid":36831}} Info 35 [18:33:47.660] Running: *ensureProjectForOpenFiles* Info 36 [18:33:47.661] Structure before ensureProjectForOpenFiles: Info 37 [18:33:47.661] Project '/dev/null/inferredProject1*' (Inferred) 0 Info 37 [18:33:47.661] Files (19) /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es5.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2016.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.dom.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.dom.iterable.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.webworker.importscripts.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.scripthost.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.core.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.collection.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.generator.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.iterable.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.promise.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.proxy.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.reflect.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.symbol.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2016.array.include.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2016.full.d.ts /Users/mikeyhew/Desktop/foo/foo.ts Info 37 [18:33:47.661] ----------------------------------------------- Info 37 [18:33:47.661] Open files: Info 37 [18:33:47.661] FileName: /Users/mikeyhew/Desktop/foo/foo.ts ProjectRootPath: /Users/mikeyhew/Desktop/foo Info 37 [18:33:47.661] Projects: /dev/null/inferredProject1* Info 37 [18:33:47.661] Structure after ensureProjectForOpenFiles: Info 38 [18:33:47.661] Project '/dev/null/inferredProject1*' (Inferred) 0 Info 38 [18:33:47.661] Files (19) /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es5.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2016.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.dom.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.dom.iterable.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.webworker.importscripts.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.scripthost.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.core.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.collection.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.generator.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.iterable.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.promise.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.proxy.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.reflect.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.symbol.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2016.array.include.d.ts /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/lib.es2016.full.d.ts /Users/mikeyhew/Desktop/foo/foo.ts Info 38 [18:33:47.661] ----------------------------------------------- Info 38 [18:33:47.661] Open files: Info 38 [18:33:47.661] FileName: /Users/mikeyhew/Desktop/foo/foo.ts ProjectRootPath: /Users/mikeyhew/Desktop/foo Info 38 [18:33:47.661] Projects: /dev/null/inferredProject1* Info 38 [18:33:47.662] got projects updated in background, updating diagnostics for /Users/mikeyhew/Desktop/foo/foo.ts Info 39 [18:33:47.662] event: {"seq":0,"type":"event","event":"projectsUpdatedInBackground","body":{"openFiles":["/Users/mikeyhew/Desktop/foo/foo.ts"]}} Info 40 [18:33:47.663] request: {"seq":4,"type":"request","command":"geterr","arguments":{"delay":0,"files":["/Users/mikeyhew/Desktop/foo/foo.ts"]}} Perf 41 [18:33:47.664] 4::geterr: async elapsed time (in milliseconds) 1.0761 Info 42 [18:33:47.666] event: {"seq":0,"type":"event","event":"syntaxDiag","body":{"file":"/Users/mikeyhew/Desktop/foo/foo.ts","diagnostics":[]}} Info 43 [18:33:47.684] event: {"seq":0,"type":"event","event":"semanticDiag","body":{"file":"/Users/mikeyhew/Desktop/foo/foo.ts","diagnostics":[]}} Info 44 [18:33:47.685] event: {"seq":0,"type":"event","event":"suggestionDiag","body":{"file":"/Users/mikeyhew/Desktop/foo/foo.ts","diagnostics":[]}} Info 45 [18:33:47.686] event: {"seq":0,"type":"event","event":"requestCompleted","body":{"request_seq":4}} Info 46 [18:33:47.864] request: {"seq":5,"type":"request","command":"geterr","arguments":{"delay":0,"files":["/Users/mikeyhew/Desktop/foo/foo.ts"]}} Perf 47 [18:33:47.866] 5::geterr: async elapsed time (in milliseconds) 2.3314 Info 48 [18:33:47.868] event: {"seq":0,"type":"event","event":"syntaxDiag","body":{"file":"/Users/mikeyhew/Desktop/foo/foo.ts","diagnostics":[]}} Info 49 [18:33:47.868] event: {"seq":0,"type":"event","event":"semanticDiag","body":{"file":"/Users/mikeyhew/Desktop/foo/foo.ts","diagnostics":[]}} Info 50 [18:33:47.868] event: {"seq":0,"type":"event","event":"suggestionDiag","body":{"file":"/Users/mikeyhew/Desktop/foo/foo.ts","diagnostics":[]}} Info 51 [18:33:47.869] event: {"seq":0,"type":"event","event":"requestCompleted","body":{"request_seq":5}} Info 52 [18:33:55.977] request: {"seq":6,"type":"request","command":"quickinfo","arguments":{"file":"/Users/mikeyhew/Desktop/foo/foo.ts","line":1,"offset":12}} Perf 53 [18:33:56.10] 6::quickinfo: elapsed time (in milliseconds) 33.2409 Info 54 [18:33:56.10] response: {"seq":0,"type":"response","command":"quickinfo","request_seq":6,"success":true,"body":{"kind":"method","kindModifiers":"declare","start":{"line":1,"offset":9},"end":{"line":1,"offset":12},"displayString":"(method) Console.log(message?: any, ...optionalParams: any[]): void","documentation":"","tags":[]}} Info 55 [18:33:56.267] request: {"seq":7,"type":"request","command":"quickinfo","arguments":{"file":"/Users/mikeyhew/Desktop/foo/foo.ts","line":1,"offset":9}} Perf 56 [18:33:56.274] 7::quickinfo: elapsed time (in milliseconds) 6.5329 Info 57 [18:33:56.274] response: {"seq":0,"type":"response","command":"quickinfo","request_seq":7,"success":true,"body":{"kind":"method","kindModifiers":"declare","start":{"line":1,"offset":9},"end":{"line":1,"offset":12},"displayString":"(method) Console.log(message?: any, ...optionalParams: any[]): void","documentation":"","tags":[]}} Info 58 [18:34:8.601] request: {"seq":8,"type":"request","command":"quickinfo","arguments":{"file":"/Users/mikeyhew/Desktop/foo/foo.ts","line":1,"offset":27}} Perf 59 [18:34:8.603] 8::quickinfo: elapsed time (in milliseconds) 1.2295 Info 60 [18:34:8.603] response: {"seq":0,"type":"response","command":"quickinfo","request_seq":8,"success":false,"message":"No content available."}
mjbvz commented 5 years ago

Thanks. Are you sure the plugin is installed properly and enabled in that workspace? The Arguments line at the start of the tsserver log should have a the text --globalPlugins ... tslint somewhere. Here's mine using VS Code 1.30.2:

Info 0    [15:31:3.653] Starting TS Server
Info 1    [15:31:3.653] Version: 3.2.2
Info 2    [15:31:3.653] Arguments: /Users/matb/Library/Application Support/com.microsoft.VSCode.ShipIt/update.pzrv6qD/Visual Studio Code.app/Contents/Frameworks/Code Helper.app/Contents/MacOS/Code Helper /Users/matb/Library/Application Support/com.microsoft.VSCode.ShipIt/update.pzrv6qD/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js --useInferredProjectPerProjectRoot --enableTelemetry --cancellationPipeName /var/folders/_0/611900jn0yb43f1rc47_2wmh0000gp/T/vscode-typescript/tscancellation-7b26a6a36d3ab92cf020.tmp* --logVerbosity verbose --logFile /Users/matb/Library/Application Support/Code/logs/20190123T152713/exthost1/vscode.typescript-language-features/tsserver-log-nbozxG/tsserver.log --globalPlugins typescript-lit-html-plugin,typescript-styled-plugin,typescript-tslint-plugin --pluginProbeLocations /Users/matb/.vscode/extensions/bierner.lit-html-1.11.0,/Users/matb/.vscode/extensions/jpoissonnier.vscode-styled-components-0.0.25,/Users/matb/.vscode/extensions/ms-vscode.vscode-typescript-tslint-plugin-0.4.0 --locale en --noGetErrOnBackgroundUpdate

Your's does not which shows that we don't even think any tslint extension is enabled (or perhaps that no installed extension has a plugin that is eligible to be enabled)

mikeyhew commented 5 years ago

@mjbvz you're talking about the tslint compiler plugin, right? How do I enable that globally?

mjbvz commented 5 years ago

Do you have the this VS Code extension installed and enabled in your workspace? It bundles the typescript server plugin so you should not need to install that separately

mikeyhew commented 5 years ago

No I did not. Somehow I thought this was bundled with VS Code. I installed it and it works now.

mjbvz commented 5 years ago

Ok, yes this extension is not part of core vs code