TypeScript: The sample given at for `Writing-a-Language-Service-Plugin` doesn't compile.

Bug Report

🔎 Search Terms

plugin language-service compile

  • I was unable to test this on prior versions because there are no earlier versions of the documentation_____

💻 Code

This is copied from the guide at https://github.com/microsoft/TypeScript/wiki/Writing-a-Language-Service-Plugin

  const ts = modules.typescript;

  function create(info: ts.server.PluginCreateInfo) {
    // Set up decorator
    const proxy: ts.LanguageService = Object.create(null);
    for (let k of Object.keys(info.languageService) as Array<
      keyof ts.LanguageService
    >) {
      const x = info.languageService[k];
      proxy[k] = (...args: Array<{}>) => x.apply(info.languageService, args);
    }
    return proxy;
  }

  return { create };
}

🙁 Actual behavior

I am entering the code sample from https://github.com/microsoft/TypeScript/wiki/Writing-a-Language-Service-Plugin and I am getting compile errors while setting up the decorator:

image

🙂 Expected behavior

I was hoping I could copy/paste the sample and it would work.

NOTE: It’s also possible the documentation around this just needs to be clearer. How do you go about starting the plugin? Do you run yo code? Do you run npm init? Do you just create a single file index.js? I am very unclear how to begin development of this plugin.

About this issue

  • Original URL
  • State: open
  • Created 3 years ago
  • Reactions: 1
  • Comments: 15 (7 by maintainers)

Most upvoted comments

That code sample goes in your package.json and the tsconfig would have "my-plugin"

Cool! I’ve updated the code on the wiki page (and you’re welcome to update it too, https://github.com/microsoft/TypeScript-wiki/blob/main/Writing-a-Language-Service-Plugin.md ) to handle strict: true which should remove the compiler errors.

The system is very simple - you give the tsconfig.json a node-style resolution path to the JavaScript file you’ve made, I thought the ‘testing locally’ section did a pretty good job covering that but I’m open to improvements

Looks like the code samples assume strict: false (given that that is the default tsconfig) I think we probably just need to update it to run in strict also