typescript-language-server / typescript-language-server

TypeScript & JavaScript Language Server

Home Page:https://www.npmjs.com/package/typescript-language-server

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Support "Move to file" code action

guillaumebrunerie opened this issue · comments

Typescript 5.1 introduced a new "Move to file" code action in June 2023 (https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-1.html#move-declarations-to-existing-files), allowing moving a declaration to an existing file.

I can’t manage to get it to show up in Emacs, it only shows the "Move to a new file" code action which is a different (older) one. Is it supported by typescript-language-server? Looking at the logs, Emacs doesn’t get the code action at all:

[Trace - 09:38:26 AM] Received response 'textDocument/codeAction - (84684)' in 2842ms.
Result: [
  {
    "title": "Move to a new file",
    "kind": "refactor.move",
    "command": {
      "title": "Move to a new file",
      "command": "_typescript.applyRefactoring",
      "arguments": [
        {
          "file": "[...]",
          "startLine": 48,
          "startOffset": 20,
          "endLine": 48,
          "endOffset": 20,
          "refactor": "Move to a new file",
          "action": "Move to a new file"
        }
      ]
    }
  },
  {
    "title": "Convert to named function",
    "kind": "refactor",
    "command": {
      "title": "Convert to named function",
      "command": "_typescript.applyRefactoring",
      "arguments": [
        {
          "file": "[...]",
          "startLine": 48,
          "startOffset": 20,
          "endLine": 48,
          "endOffset": 20,
          "refactor": "Convert arrow function or function expression",
          "action": "Convert to named function"
        }
      ]
    }
  }
]

It might also be that Emacs' lsp-mode doesn’t send the right capabilities, I guess, as it is a code action that requires showing a file picker of some sort.

It would have to be an opt-in and would require some custom glue code on the client.