First party TypeScript support

TLDR: Last year there was a post that Panic is working towards first party support for a TypeScript LSP. Is this still on the roadmap?

Every now and again I get sad looking at VSCode, I don’t like ugly stuff and VSCode is one ugly app. Then I download a trial for Nova, and it feels so fresh and at home on my mac. But current TypeScript support is not up to par (autoimport doesn’t work and autocomplete looks buggy) and I find myself firing up VSCode again after some time. Having functional TypeScript support out of the box would be a game changer for me personally.

3 Likes

We still have want to do this, but it’s low priority. Part of the issue surrounding it is that there isn’t a super strong TypeScript language server that has all of the features necessary to resolve the issues you describe. The one used by our excellent third-party TypeScript extension (from Cameron) is third-party, not made by Microsoft, so does not support the full breadth of what we’d need (otherwise we’d just be retreading the exact work Cameron already did with similar effect).

VSCode’s first-party TypeScript support is powered by a language server made by Microsoft which is partially closed source and not licensed in such a way we can use any of it (and makes assumptions it’s running alongside VSCode, which is somewhat antithetical to the LSP spec).

An option then would be to attempt to beef up one of the existing third-party language servers, which is somewhat out of our domain for code maintainability with our small team. So for now, it’s unfortunately likely that it will remain lower on our priority list. As much as I hate saying that, I have to be a bit realistic. :sweat_smile:

2 Likes

@mrkbrnd I am not sure if this helps for your projects but have you tried the Deno Extension?

I am not a TS/node/npm super-user but somehow I found deno LSP pretty impressive for JS and TS projects.
I Just came across it myself recently, when I was migrating from all things node/npm to Deno.land :sauropod: for good out of personal frustration!

Considering you are probably working in node/npm projects you do not need to even do anything to leverage the Deno LSP. No setups required it should just just work! :blush:

Needless to say just make sure you turn off the TS extension before trying the Deno.

The only problem I had with it, was this issue regarding the cache code action but that should not matter in your case if you are using it in node/npm projects?

Hopefully it will be fixed in the near future by either Panic :eyes: or the Extension Maintainers :eyes:

Nice suggestion, but it doesn’t seem to play nice with React. (I mainly work on NextJS projects).
Like if I start typing useS it has no clue that im heading for useState and that it needs to be auto-imported also.

And when I import my own components manually and let it auto complete inside the tsx it adds the () brackets because it’s a function component, like:

import MyComponent from './MyComponent'

function AnotherComponent() {

  return (
   [start typeing]
    <MyCo
  );
}

autocompletes to

import MyComponent from './MyComponent'

function AnotherComponent() {

  return (
    <MyComponent()
  );
}

Oh yea, that is actually true, for your own component you will need to end up doing it Deno way which is not the solution. :face_with_diagonal_mouth:

I am not sure why those LSPs dont provide the auto-imports for TS/JS. Because Nova actually supports such auto-imports? As an example if you use Intelephense for php, and type in a ClassName it automatically imports them, it even sort the namespace if there is a conflict! . :thinking:

Nova conforms the Language Server Protocol, but TypeScript doesn’t, which is weird since both are Microsoft. So there is a translation layer in between, not sure what Deno uses, but the TypeScript extension uses this.

There is an open ticket on the official TypeScript repo, but there doesn’t seem to be much action from Microsoft’s side.

1 Like

The irony! :joy:
I had a quick look. Intererstingly I have no idea what Deno uses for TS :thinking:.

The LSP is open source and built in the cli (deno lsp). But they do definately conform to the LSP protocol.

However I tried Deno LSP extension for VScode and suprise suprise, the Deno LSP for vscode also supports autimport even though it basically completely disables the microsoft built in TS… :thinking: :thinking: :thinking:

Now I am really confused why the “auto import” work in the VSCode but not for Nova, when using Deno!

Are there any plans to revisit this work? It looks like the existing TS extension is no longer developed, and there have been some performance issues as well. I’ve been trying out Nova and TS support is fairly critical to, well, doing any work!

Yes, this is an excellent point (thank you for bringing it up), I was not aware that Cameron had archived the project until this.

We are discussing internally how we might want to handle this. It will have an impact on our users, but unfortunately right now I do not personally have the engineering bandwidth to take on the project (either a fork or a reimplementation of Cameron’s work) and Panic’s other engineers are busy with our other projects for the next month or two.

So we will definitely be working towards a solution, but I cannot at this point promise what exactly or when it might drop (the next major release / Nova 12 timeline is likely out due to time constraints).

1 Like