diff --git a/.dir-locals.el b/.dir-locals.el new file mode 100644 index 0000000..d08dbd7 --- /dev/null +++ b/.dir-locals.el @@ -0,0 +1,6 @@ +((typescript-mode + . ((eval . (setq tide-tsserver-executable + (concat + (let ((d (dir-locals-find-file "."))) + (if (stringp d) d (car d))) + "node_modules/typescript/lib/tsserver.js")))))) diff --git a/packages/ts-plugin/README.md b/packages/ts-plugin/README.md index bc3705c..fbe4903 100644 --- a/packages/ts-plugin/README.md +++ b/packages/ts-plugin/README.md @@ -40,12 +40,55 @@ then `yarn install`. ### Emacs with Tide -It should Just Work. +It should Just Work, if the `node_modules` next to `tsconfig.json` has +a `typescript/` subdirectory. + +If no such `typescript/` subdirectory exists in `node_modules`, then +because +[tsserver loads plugins from relative to tsserver.js rather than tsconfig.json](https://github.com/microsoft/TypeScript/issues/42688), +you will have to tell `tide-mode` about where your project's +`tsserver` lives. + +One easy way to do that is to create a symlink in your `node_modules`: + +```shell +ln -s /FULL/PATH/TO/YOUR/PROJECT/node_modules/typescript ./node_modules/ +``` + +Another way to do it is to put a `.dir-locals.el` file in your project +root, containing + +```elisp +((tide-mode + . ((tide-tsserver-executable + . "/FULL/PATH/TO/YOUR/PROJECT/node_modules/typescript/bin/tsserver")))) +``` + +I don't know of any way of automatically resolving a relative path +specification with respect to the directory containing +`.dir-locals.el` without using `eval`, but if you're happy to do so, +you can use the following: + +```elisp +((typescript-mode + . ((eval . (setq tide-tsserver-executable + (concat + (let ((d (dir-locals-find-file "."))) + (if (stringp d) d (car d))) + "node_modules/typescript/lib/tsserver.js")))))) +``` + +If you use the `.dir-locals.el` methods, you may need to run +`tide-restart-server` once after opening the first TypeScript file in +your project (and then close and re-open that TypeScript file). ### Visual Studio Code -After `yarn install`, you will have a `node_modules/typescript` -directory. +After `yarn install`, if you have a `node_modules/typescript` +directory, then the following will work. (Otherwise, there may not be +an option to select "Use Workspace Version", and you may need to +symlink a `typescript` directory into `node_modules` as described for +Emacs Tide above.) Open VS Code, and select the version of TypeScript contained therein by following instructions @@ -60,3 +103,25 @@ file containing: { "typescript.tsdk": "node_modules/typescript/lib" } + +## Debugging + +You can get verbose logs from Tide's tsserver by setting the Emacs +variable `tide-tsserver-process-environment`: + +```elisp +(setq tide-tsserver-process-environment '("TSS_LOG=-file /tmp/tss.log")) +``` + +You can also enable "verbose" output, if that's useful: + +```elisp +(setq tide-tsserver-process-environment '("TSS_LOG=-level verbose -file /tmp/tss.log")) +``` + +Finally, you can set these options in a `.dir-locals.el` file, too: + +```elisp +((typescript-mode + . ((tide-tsserver-process-environment . ("TSS_LOG=-level verbose -file /tmp/tss.log"))))) +```