sublimelsp / LSP-typescript

TypeScript, JavaScript support for Sublime LSP plugin
MIT License
135 stars 11 forks source link

LSP Typescript is really slow on large projects #129

Open ishanray opened 2 years ago

ishanray commented 2 years ago

Autocompletion takes a good few seconds.

Digging into it, it seems like the Theia TypeScript Language Server might not be the best choice.

Can we consider switching to something like: https://github.com/neoclide/coc-tsserver?

This extension is a fork of typescript-language-features extension which is bundled with VSCode and is much faster.

I can start working on it if this is something which might be useful.

Would it be better to do it as a different LSP plugin?

rwols commented 2 years ago

What makes you think an approach like in coc-tsserver is better? In what way is it better? Why is it faster?

rchl commented 2 years ago

Both coc-tsserver and https://github.com/typescript-language-server/typescript-language-server (which this plugin uses) are mostly just wrappers around the typescript's tsserver that provides the main API to interact with the project. There is nothing fundamentally different between those.

And switching to https://github.com/neoclide/coc-tsserver is not an option because it's a nvim-specific implementation rather than a standard-compliant language server.

You have to be more specific with your feedback on what exactly is faster in coc-tsserver. If there is something that can be improved then it's more likely that the work needs to be done in https://github.com/typescript-language-server/typescript-language-server rather then here though.

ishanray commented 2 years ago

I guess the same project opened in nvim using coc-nvim is much faster in completions matching vscode speed but the same project in sublime often takes a long time to show completions, etc. hence I was looking at the diff between the two.

rchl commented 2 years ago

Without more specific information we won't be able to do anything. If you are serious about trying to solve this then I'd suggest providing:

a) a video showing the difference of loading the project in both editors b) a LSP log from both (see https://lsp.sublimetext.io/troubleshooting/#self-help-instructions on how to enable logging in Sublime LSP) c) a project that reproduces the difference

rchl commented 2 years ago

Actually, before anything else, I'd suggest checking if you can reproduce your issue in Safe Mode with just Package Control, LSP and LSP-typescript installed.

I'm honestly skeptical about there being any meaningful difference in the performance of this package vs. coc-tsserver, knowing how both work... There might be something in your configuration that causes the issue though.

ishanray commented 2 years ago

Videos:

Sublime with only LSP and LSP-typescript:

https://user-images.githubusercontent.com/5403397/151196544-7caafbe8-6c66-4624-949b-41033adba256.mp4


MacVim with coc-tsserver:

https://user-images.githubusercontent.com/5403397/151196483-781b3ef6-31cd-4f4a-8d7f-4c0810605fd9.mp4

Even local autocompletion of the Fixtures word is not happening on Sublime when typing pretty slowly and the fields on Fixtures takes much longer of course as seen in the video.

I will follow up with more logs.

rchl commented 2 years ago

I guess part of the issue is https://github.com/typescript-language-server/typescript-language-server/issues/327 though I'm not sure if that's all to what you are seeing.

No, sorry, that's about diagnostics, not completions.

rchl commented 2 years ago

Actually, before anything else, I'd suggest checking if you can reproduce your issue in Safe Mode with just Package Control, LSP and LSP-typescript installed.

Can you please try what I've mentioned above? Running multiple LSP servers will affect response times since LSP waits for all servers to resolve before showing completions.

ishanray commented 2 years ago

2022-01-26 12 21 09 2022-01-26 12 21 14

Still the same sluggishness:

https://user-images.githubusercontent.com/5403397/151213991-fc3d4265-ca90-4328-a7a7-a34327985680.mp4

Narretz commented 2 years ago

This sounds a lot like https://github.com/sublimelsp/LSP-typescript/issues/128

Big project = many dependencies = many autocompletions, that somehow kill Sublime's performance

Can you check in lsp log panel if you are seeing logs like LSP-typescript 27: <params with <number> characters>. If the has 7 digits and above, you are looking at 10000s of completions.

ishanray commented 2 years ago

@Narretz Yes I do see a line like :: <<< LSP-typescript 17: <params with 20040 characters>.

So coc-nvim and VS Code is doing something to prevent this as I don't see this issue in those two editors.

ishanray commented 2 years ago

Was checking out the vscode typescript language feature and this function filters some entries which I can't find in the language server used by LSP? Best I could find is https://github.com/typescript-language-server/typescript-language-server/blob/899bfa6353150de929821fdaf86dfa1970c68137/src/lsp-server.ts#L593

Seems like it is only some vs code config related filters though

rchl commented 2 years ago

It filters out warnings which we also do here.

It also filters out suggest.paths and suggest.autoImports if the corresponding options are disabled but those are enabled by default so by default the behavior should be equivalent.

BTW. 20040 of bytes is not really much unless you have a very slow CPU.

ishanray commented 2 years ago

Maybe the VS Code extension caches the results somewhere?

rchl commented 2 years ago

No, there is no way to cache those when you are typing text since the state is always different.

In any case, you haven't provided full log so far.

20 KB of completions is really not that much so I'm not quite convinced that that's the problem. Do you have a very slow computer?

ishanray commented 2 years ago
::  -> LSP-typescript textDocument/didChange: {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'version': 15}, 'contentChanges': [{'text': '      ', 'rangeLength': 0, 'range': {'end': {'character': 0, 'line': 403}, 'start': {'character': 0, 'line': 403}}}]}
:: --> LSP-typescript textDocument/documentHighlight(31): {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts'}, 'position': {'character': 6, 'line': 403}}
:: --> LSP-typescript typescript/inlayHints(32): {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts'}}
:: <<< LSP-typescript 31: []
:: <<< LSP-typescript 32: {'inlayHints': []}
:: <-  LSP-typescript textDocument/publishDiagnostics: {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'diagnostics': [{'tags': [1], 'code': 6133, 'message': "'sync' is declared but its value is never read.", 'severity': 4, 'range': {'end': {'character': 16, 'line': 404}, 'start': {'character': 12, 'line': 404}}, 'source': 'typescript'}]}
:: --> LSP-typescript textDocument/codeAction(33): {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts'}, 'context': {'diagnostics': []}, 'range': {'end': {'character': 6, 'line': 403}, 'start': {'character': 6, 'line': 403}}}
:: <<< LSP-typescript 33: []
:: <-  LSP-typescript textDocument/publishDiagnostics: {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'diagnostics': [{'tags': [1], 'code': 6133, 'message': "'sync' is declared but its value is never read.", 'severity': 4, 'range': {'end': {'character': 16, 'line': 404}, 'start': {'character': 12, 'line': 404}}, 'source': 'typescript'}]}
::  -> LSP-typescript textDocument/didChange: {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'version': 16}, 'contentChanges': [{'text': 'c', 'rangeLength': 0, 'range': {'end': {'character': 6, 'line': 403}, 'start': {'character': 6, 'line': 403}}}]}
:: --> LSP-typescript textDocument/completion(34): {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts'}, 'position': {'character': 7, 'line': 403}}
:: --> LSP-typescript typescript/inlayHints(35): {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts'}}
:: <<< LSP-typescript 34: <params with 1062864 characters>
:: <-  LSP-typescript textDocument/publishDiagnostics: {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'diagnostics': [{'tags': [1], 'code': 6133, 'message': "'sync' is declared but its value is never read.", 'severity': 4, 'range': {'end': {'character': 16, 'line': 404}, 'start': {'character': 12, 'line': 404}}, 'source': 'typescript'}]}
:: --> LSP-typescript textDocument/codeAction(36): {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts'}, 'context': {'diagnostics': []}, 'range': {'end': {'character': 9, 'line': 403}, 'start': {'character': 9, 'line': 403}}}
::  -> LSP-typescript textDocument/didChange: {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'version': 20}, 'contentChanges': [{'text': 'o', 'rangeLength': 0, 'range': {'end': {'character': 7, 'line': 403}, 'start': {'character': 7, 'line': 403}}}, {'text': 'n', 'rangeLength': 0, 'range': {'end': {'character': 8, 'line': 403}, 'start': {'character': 8, 'line': 403}}}, {'text': 'f', 'rangeLength': 0, 'range': {'end': {'character': 9, 'line': 403}, 'start': {'character': 9, 'line': 403}}}, {'text': 'i', 'rangeLength': 0, 'range': {'end': {'character': 10, 'line': 403}, 'start': {'character': 10, 'line': 403}}}]}
:: --> LSP-typescript textDocument/completion(37): {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts'}, 'position': {'character': 11, 'line': 403}}
:: --> LSP-typescript typescript/inlayHints(38): {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts'}}
::  -> LSP-typescript textDocument/didChange: {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'version': 21}, 'contentChanges': [{'text': 'g', 'rangeLength': 0, 'range': {'end': {'character': 11, 'line': 403}, 'start': {'character': 11, 'line': 403}}}]}
:: --> LSP-typescript textDocument/completion(39): {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts'}, 'position': {'character': 12, 'line': 403}}
:: --> LSP-typescript typescript/inlayHints(40): {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts'}}
::  -> LSP-typescript textDocument/didChange: {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'version': 22}, 'contentChanges': [{'text': '.', 'rangeLength': 0, 'range': {'end': {'character': 12, 'line': 403}, 'start': {'character': 12, 'line': 403}}}]}
:: --> LSP-typescript textDocument/completion(41): {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts'}, 'position': {'character': 13, 'line': 403}}
:: --> LSP-typescript typescript/inlayHints(42): {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts'}}
:: --> LSP-typescript textDocument/documentHighlight(43): {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts'}, 'position': {'character': 13, 'line': 403}}
:: <<< LSP-typescript 35: {'inlayHints': []}
:: <-  LSP-typescript textDocument/publishDiagnostics: {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'diagnostics': [{'tags': [], 'code': 2304, 'message': "Cannot find name 'c'.", 'severity': 1, 'range': {'end': {'character': 7, 'line': 403}, 'start': {'character': 6, 'line': 403}}, 'source': 'typescript'}, {'tags': [1], 'code': 6133, 'message': "'sync' is declared but its value is never read.", 'severity': 4, 'range': {'end': {'character': 16, 'line': 404}, 'start': {'character': 12, 'line': 404}}, 'source': 'typescript'}]}
:: --> LSP-typescript textDocument/codeAction(44): {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts'}, 'context': {'diagnostics': []}, 'range': {'end': {'character': 13, 'line': 403}, 'start': {'character': 13, 'line': 403}}}
:: <<< LSP-typescript 37: <params with 329306 characters>
:: <<< LSP-typescript 39: <params with 320901 characters>
:: <<< LSP-typescript 41: {'items': [{'filterText': '.$nonEmptyObject', 'kind': 21, 'commitCharacters': ['.', ',', '('], 'textEdit': {'newText': '[$nonEmptyObject]', 'range': {'end': {'character': 13, 'line': 403}, 'start': {'character': 12, 'line': 403}}}, 'label': '$nonEmptyObject', 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': [{'source': '/Users/test/node_modules/mobx-state-tree/dist/types/complex-types/model', 'data': {'fileName': '/Users/test/node_modules/mobx-state-tree/dist/types/complex-types/model.d.ts', 'exportName': '$nonEmptyObject'}, 'name': '$nonEmptyObject'}], 'line': 404, 'offset': 14}, 'sortText': '\uffff11'}, {'insertTextFormat': 2, 'kind': 2, 'commitCharacters': ['.', ',', '('], 'label': 'addAppConfig', 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['addAppConfig'], 'line': 404, 'offset': 14}, 'sortText': '11'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.'], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['allApiKeys'], 'line': 404, 'offset': 14}, 'label': 'allApiKeys'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.', ',', '('], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['appConfigs'], 'line': 404, 'offset': 14}, 'label': 'appConfigs'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.'], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['appConfigsAsArray'], 'line': 404, 'offset': 14}, 'label': 'appConfigsAsArray'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.'], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['contentHash'], 'line': 404, 'offset': 14}, 'label': 'contentHash'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.', ',', '('], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['createdDate'], 'line': 404, 'offset': 14}, 'label': 'createdDate'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.'], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['defaultApiIdentifier'], 'line': 404, 'offset': 14}, 'label': 'defaultApiIdentifier'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.'], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['dominionID'], 'line': 404, 'offset': 14}, 'label': 'dominionID'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.', ',', '('], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['enabledModelKeys'], 'line': 404, 'offset': 14}, 'label': 'enabledModelKeys'}, {'insertTextFormat': 2, 'kind': 2, 'commitCharacters': ['.', ',', '('], 'label': 'getAppConfigByApiKey', 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['getAppConfigByApiKey'], 'line': 404, 'offset': 14}, 'sortText': '11'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.', ',', '('], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['key'], 'line': 404, 'offset': 14}, 'label': 'key'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.'], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['mostRecentSync'], 'line': 404, 'offset': 14}, 'label': 'mostRecentSync'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.'], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['name'], 'line': 404, 'offset': 14}, 'label': 'name'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.'], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['remoteIdentifier'], 'line': 404, 'offset': 14}, 'label': 'remoteIdentifier'}, {'insertTextFormat': 2, 'kind': 2, 'commitCharacters': ['.', ',', '('], 'label': 'removeAppConfig', 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['removeAppConfig'], 'line': 404, 'offset': 14}, 'sortText': '11'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.', ',', '('], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['requestedScopes'], 'line': 404, 'offset': 14}, 'label': 'requestedScopes'}, {'insertTextFormat': 2, 'kind': 2, 'commitCharacters': ['.', ',', '('], 'label': 'requestSync', 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['requestSync'], 'line': 404, 'offset': 14}, 'sortText': '11'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.'], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['secretKeys'], 'line': 404, 'offset': 14}, 'label': 'secretKeys'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.', ',', '('], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['serverContract'], 'line': 404, 'offset': 14}, 'label': 'serverContract'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.', ',', '('], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['testApiVersion'], 'line': 404, 'offset': 14}, 'label': 'testApiVersion'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.', ',', '('], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['syncs'], 'line': 404, 'offset': 14}, 'label': 'syncs'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.'], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['syncsAsArray'], 'line': 404, 'offset': 14}, 'label': 'syncsAsArray'}, {'sortText': '11', 'kind': 5, 'commitCharacters': ['.', ',', '('], 'data': {'file': '/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'entryNames': ['type'], 'line': 404, 'offset': 14}, 'label': 'type'}], 'isIncomplete': False}
:: <<< LSP-typescript 43: []
:: <<< LSP-typescript 38: {'inlayHints': []}
:: <<< LSP-typescript 36: []
:: <-  LSP-typescript textDocument/publishDiagnostics: {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'diagnostics': [{'tags': [], 'code': 1003, 'message': 'Identifier expected.', 'severity': 1, 'range': {'end': {'character': 13, 'line': 403}, 'start': {'character': 13, 'line': 403}}, 'source': 'typescript'}, {'tags': [], 'code': 2304, 'message': "Cannot find name 'c'.", 'severity': 1, 'range': {'end': {'character': 7, 'line': 403}, 'start': {'character': 6, 'line': 403}}, 'source': 'typescript'}, {'tags': [1], 'code': 6133, 'message': "'sync' is declared but its value is never read.", 'severity': 4, 'range': {'end': {'character': 16, 'line': 404}, 'start': {'character': 12, 'line': 404}}, 'source': 'typescript'}]}
:: <<< LSP-typescript 40: {'inlayHints': []}
:: <<< LSP-typescript 42: {'inlayHints': []}
:: <<< LSP-typescript 44: []
:: <-  LSP-typescript textDocument/publishDiagnostics: {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts', 'diagnostics': [{'tags': [], 'code': 1003, 'message': 'Identifier expected.', 'severity': 1, 'range': {'end': {'character': 13, 'line': 403}, 'start': {'character': 13, 'line': 403}}, 'source': 'typescript'}, {'tags': [1], 'code': 6133, 'message': "'sync' is declared but its value is never read.", 'severity': 4, 'range': {'end': {'character': 16, 'line': 404}, 'start': {'character': 12, 'line': 404}}, 'source': 'typescript'}]}

Computer is fast. Also VS Code and coc-nvim works so I don't think it matters in this case.

rchl commented 2 years ago

One thing I can see here is that the server responds to completion requests even after a new request was made. The server should likely cancel the request in that case which would result in less processing by the editor.

rchl commented 2 years ago

Were you pressing ctrl+space to trigger completions after typing each character? I don't see that happening on just typing "config". It seems like in your log the completions were triggered after c, then onfi and then after g. I can't see such behavior here. I think ST would only trigger completions on start of the word or typing a separator like ..

ishanray commented 2 years ago

Just before line 41 is when it takes the longest. I typed config.

rchl commented 2 years ago

If you were not triggering completions manually (with ctrl+space) then I'm not sure how this happened. I can't seem to reproduce LSP triggering multiple completion requests like that.

(Unfortunately the logs don't have timestamps so it's not possible to see where there are delays exactly. The "log_server": ["remote"] option that works in conjunction with https://lsp-log-parser.netlify.app/ has timing information and is much easier to parse but unfortunately it doesn't have export functionality).

rwols commented 2 years ago

Do you have some other plugin that forces more completion requests with the auto_complete command?

ishanray commented 2 years ago

No I don't have other plugins. This is all in safe mode with only LSP and LSP Typescript. Even when I don't trigger completion manually I get this issue.

rchl commented 2 years ago

Is the project you are using for testing something that you could share?

ishanray commented 2 years ago

Unfortunately I can't share the whole project since it is private. It definitely is an exceptional case. Even the vscode repo opens and works without issues in Sublime with completions being near instant.

The project I am working on has a lot of derived types based on Mobx State Trees and that is causing the slowdown. I will try narrowing it down more.

In the meantime here is a VS Code log in case it helps in any way.

Info 22904[10:40:38.197] Different program with same set of files
Info 22905[10:40:38.197] getCompletionData: Get current token: 0.01747608184814453
Info 22906[10:40:38.197] getCompletionData: Is inside comment: 0.03681600093841553
Info 22907[10:40:38.198] getCompletionData: Get previous token: 0.031906962394714355
Info 22908[10:40:38.198] getCompletionsAtPosition: isCompletionListBlocker: 0.002989053726196289
Info 22909[10:40:38.198] getCompletionData: Semantic work: 0.40110206604003906
Info 22910[10:40:38.202] getCompletionsAtPosition: getCompletionEntriesFromSymbols: 2.2912039756774902
Perf 22911[10:40:38.202] 4741::completionInfo: elapsed time (in milliseconds) 45.0371
Info 22912[10:40:38.202] response:
    {"seq":0,"type":"response","command":"completionInfo","request_seq":4741,"success":true,"performanceData":{"updateGraphDurationMs":39.930644035339355},"body":{"isGlobalCompletion":false,"isMemberCompletion":true,"isNewIdentifierLocation":false,"entries":[{"name":"apiKey","kind":"property","kindModifiers":"","sortText":"11"},{"name":"app","kind":"property","kindModifiers":"","sortText":"11"},{"name":"appPath","kind":"property","kindModifiers":"","sortText":"11"},{"name":"createApiKey","kind":"method","kindModifiers":"","sortText":"11"},{"name":"createConfigurationVariable","kind":"method","kindModifiers":"","sortText":"11"},{"name":"createFile","kind":"method","kindModifiers":"","sortText":"11"},{"name":"createModel","kind":"method","kindModifiers":"","sortText":"11"},{"name":"createPage","kind":"method","kindModifiers":"","sortText":"11"},{"name":"createRecord","kind":"method","kindModifiers":"","sortText":"11"},{"name":"creator","kind":"property","kindModifiers":"","sortText":"11"},{"name":"currentTreeEdits","kind":"property","kindModifiers":"","sortText":"11"},{"name":"db","kind":"property","kindModifiers":"","sortText":"11"},{"name":"defaultLoggedInDeveloperSession","kind":"property","kindModifiers":"","sortText":"11"},{"name":"defaultLoggedInUserSession","kind":"property","kindModifiers":"","sortText":"11"},{"name":"developmentEnvironment","kind":"property","kindModifiers":"","sortText":"11"},{"name":"developmentSessionModel","kind":"property","kindModifiers":"optional","sortText":"11"},{"name":"domain","kind":"property","kindModifiers":"","sortText":"11"},{"name":"editTree","kind":"method","kindModifiers":"","sortText":"11"},{"name":"fieldSnapshot","kind":"property","kindModifiers":"","sortText":"11"},{"name":"grantEditorPermissions","kind":"method","kindModifiers":"","sortText":"11"},{"name":"logger","kind":"property","kindModifiers":"","sortText":"11"},{"name":"mergeIntoPackageJSON","kind":"method","kindModifiers":"","sortText":"11"},{"name":"newPlatformWorkUnit","kind":"method","kindModifiers":"","sortText":"11"},{"name":"newReadOnlySchemaRoot","kind":"method","kindModifiers":"","sortText":"11"},{"name":"productionEnvironment","kind":"property","kindModifiers":"","sortText":"11"},{"name":"productionSessionModel","kind":"property","kindModifiers":"optional","sortText":"11"},{"name":"readOnlyDevAppPath","kind":"method","kindModifiers":"","sortText":"11"},{"name":"readOnlyProdAppPath","kind":"method","kindModifiers":"","sortText":"11"},{"name":"readWriteDevAppPath","kind":"method","kindModifiers":"","sortText":"11"},{"name":"readWriteProdAppPath","kind":"method","kindModifiers":"","sortText":"11"},{"name":"startLoggedInDeveloperServicesAreaSession","kind":"method","kindModifiers":"","sortText":"11"},{"name":"startLoggedInDeveloperSession","kind":"method","kindModifiers":"","sortText":"11"},{"name":"startLoggedInUserSession","kind":"method","kindModifiers":"","sortText":"11"},{"name":"startSession","kind":"method","kindModifiers":"","sortText":"11"},{"name":"toJSON","kind":"method","kindModifiers":"","sortText":"11"},{"name":"treeOwner","kind":"method","kindModifiers":"","sortText":"11"}]}}

There is definitely different behaviours in the language servers somewhere.

rchl commented 2 years ago

Setting:

    "initializationOptions": {
        "logVerbosity": "verbose",
    }

in LSP-typescript settings would produce a big log in a .log directory in projects' root.

That maybe would be useful but could contain private information so up to you if you want to share it.

Although, I think, we more or less know that the issue is with too often triggered completion request but that's on the ST side so maybe we don't need a log, just figure out a way to reproduce...

ishanray commented 2 years ago

This is the sublime text .log directory log entry for the same completion:

    {"command":"completionInfo","seq":142,"type":"request","arguments":{"file":"/Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts","line":34,"offset":13}}
Info 2176 [20:22:46.741] Starting updateGraphWorker: Project: /Users/test/packages/api/tsconfig.json
Info 2177 [20:22:46.785] Finishing updateGraphWorker: Project: /Users/test/packages/api/tsconfig.json Version: 17 structureChanged: false structureIsReused:: Completely Elapsed: 44.01275098323822ms
Info 2178 [20:22:46.785] Different program with same set of files
Info 2179 [20:22:46.785] getCompletionData: Get current token: 0.01697695255279541
Info 2180 [20:22:46.785] getCompletionData: Is inside comment: 0.03499007225036621
Info 2181 [20:22:46.785] getCompletionData: Get previous token: 0.03343701362609863
Info 2182 [20:22:46.786] getCompletionsAtPosition: isCompletionListBlocker: 0.002371072769165039
Info 2183 [20:22:46.786] getCompletionData: Semantic work: 0.37578797340393066
Info 2184 [20:22:46.788] getCompletionsAtPosition: getCompletionEntriesFromSymbols: 0.8626300096511841
Perf 2185 [20:22:46.788] 142::completionInfo: elapsed time (in milliseconds) 47.4227
Info 2186 [20:22:46.788] response:
    {"seq":0,"type":"response","command":"completionInfo","request_seq":142,"success":true,"performanceData":{"updateGraphDurationMs":44.01275098323822},"body":{"isGlobalCompletion":false,"isMemberCompletion":true,"isNewIdentifierLocation":false,"entries":[{"name":"apiKey","kind":"property","kindModifiers":"","sortText":"11"},{"name":"app","kind":"property","kindModifiers":"","sortText":"11"},{"name":"appPath","kind":"property","kindModifiers":"","sortText":"11"},{"name":"createApiKey","kind":"method","kindModifiers":"","sortText":"11"},{"name":"createConfigurationVariable","kind":"method","kindModifiers":"","sortText":"11"},{"name":"createFile","kind":"method","kindModifiers":"","sortText":"11"},{"name":"createModel","kind":"method","kindModifiers":"","sortText":"11"},{"name":"createPage","kind":"method","kindModifiers":"","sortText":"11"},{"name":"createRecord","kind":"method","kindModifiers":"","sortText":"11"},{"name":"creator","kind":"property","kindModifiers":"","sortText":"11"},{"name":"currentTreeEdits","kind":"property","kindModifiers":"","sortText":"11"},{"name":"db","kind":"property","kindModifiers":"","sortText":"11"},{"name":"defaultLoggedInDeveloperSession","kind":"property","kindModifiers":"","sortText":"11"},{"name":"defaultLoggedInUserSession","kind":"property","kindModifiers":"","sortText":"11"},{"name":"developmentEnvironment","kind":"property","kindModifiers":"","sortText":"11"},{"name":"developmentSessionModel","kind":"property","kindModifiers":"optional","sortText":"11"},{"name":"domain","kind":"property","kindModifiers":"","sortText":"11"},{"name":"editTree","kind":"method","kindModifiers":"","sortText":"11"},{"name":"fieldSnapshot","kind":"property","kindModifiers":"","sortText":"11"},{"name":"grantEditorPermissions","kind":"method","kindModifiers":"","sortText":"11"},{"name":"logger","kind":"property","kindModifiers":"","sortText":"11"},{"name":"mergeIntoPackageJSON","kind":"method","kindModifiers":"","sortText":"11"},{"name":"newPlatformWorkUnit","kind":"method","kindModifiers":"","sortText":"11"},{"name":"newReadOnlySchemaRoot","kind":"method","kindModifiers":"","sortText":"11"},{"name":"productionEnvironment","kind":"property","kindModifiers":"","sortText":"11"},{"name":"productionSessionModel","kind":"property","kindModifiers":"optional","sortText":"11"},{"name":"readOnlyDevAppPath","kind":"method","kindModifiers":"","sortText":"11"},{"name":"readOnlyProdAppPath","kind":"method","kindModifiers":"","sortText":"11"},{"name":"readWriteDevAppPath","kind":"method","kindModifiers":"","sortText":"11"},{"name":"readWriteProdAppPath","kind":"method","kindModifiers":"","sortText":"11"},{"name":"startLoggedInDeveloperServicesAreaSession","kind":"method","kindModifiers":"","sortText":"11"},{"name":"startLoggedInDeveloperSession","kind":"method","kindModifiers":"","sortText":"11"},{"name":"startLoggedInUserSession","kind":"method","kindModifiers":"","sortText":"11"},{"name":"startSession","kind":"method","kindModifiers":"","sortText":"11"},{"name":"toJSON","kind":"method","kindModifiers":"","sortText":"11"},{"name":"treeOwner","kind":"method","kindModifiers":"","sortText":"11"}]}}

Looks very similar to the VSCode ts extension. Maybe the problem lies in the way Sublime handles the completions then?

ishanray commented 2 years ago

Ok I noticed something else. There is a big pause around textDocument/publishDiagnostics.

If I wait for the textDocument/publishDiagnostics to be complete and then press a completion character such as . the completions show up instantly.

Is there a way for me to turn off diagnostics completely on the server and test?

Maybe that is blocking something.

:: --> LSP-typescript textDocument/documentHighlight(69): {'textDocument': {'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts'}, 'position': {'character': 5, 'line': 33}}

---- 
big pause here

:: <-  LSP-typescript textDocument/publishDiagnostics: {'diagnostics': [], 'uri': 'file:///Users/test/packages/api/spec/routes/connections/webhooks/test/checkouts.spec.ts'}
:: --> LSP-typescript textDocument/codeAction
jansedlon commented 2 years ago

Hi, I'm experiencing the same. And as @ishanray said, there's a big pause around textDocument/publishDiagnostics

rchl commented 2 years ago

Slow response for textDocument/publishDiagnostics is not an indication of a bug itself. It can be slow if the typescript has to analyze and compile a lot of dependent files.

If you have a project that works slowly in ST but not in VSCode then comparing the tsserver logs is probably gonna tell the most.

In VSCode it's this option:

Screenshot 2022-02-05 at 21 12 58

In ST see https://github.com/sublimelsp/LSP-typescript/issues/129#issuecomment-1029462686

I'm not really gonna be able to help more unless proper/full logs are provided or a project that reproduces the difference.

Note also that different versions of Typescript can also make a difference. ST shows the version used in the LSP log panel and VSCode show it in the status bar after clicking {}.

jansedlon commented 2 years ago

This is probably as close as I can get.. I just simply typed const a = 1;, new line and then started recording a.

VSCode

Info 1789 [21:38:25.063] request:
    {
      "seq": 236,
      "type": "request",
      "command": "getApplicableRefactors",
      "arguments": {
        "file": "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx",
        "startLine": 1,
        "startOffset": 1,
        "endLine": 1,
        "endOffset": 1
      }
    }
Perf 1790 [21:38:25.063] 236::getApplicableRefactors: elapsed time (in milliseconds) 0.6449
Info 1791 [21:38:25.063] response:
    {"seq":0,"type":"response","command":"getApplicableRefactors","request_seq":236,"success":true,"body":[{"name":"Convert export","description":"Convert default export to named export","actions":[{"name":"Convert default export to named export","description":"Convert default export to named export","kind":"refactor.rewrite.export.named","notApplicableReason":"Could not find export statement"},{"name":"Convert named export to default export","description":"Convert named export to default export","kind":"refactor.rewrite.export.default","notApplicableReason":"Could not find export statement"}]},{"name":"Convert import","description":"Convert namespace import to named imports","actions":[{"name":"Convert namespace import to named imports","description":"Convert namespace import to named imports","kind":"refactor.rewrite.import.named","notApplicableReason":"Selection is not an import declaration."}]},{"name":"Convert import","description":"Convert named imports to namespace import","actions":[{"name":"Convert named imports to namespace import","description":"Convert named imports to namespace import","kind":"refactor.rewrite.import.namespace","notApplicableReason":"Selection is not an import declaration."}]},{"name":"Extract Symbol","description":"Extract function","actions":[{"name":"Extract Function","description":"Extract function","kind":"refactor.extract.function","notApplicableReason":"Cannot extract empty range."}]},{"name":"Extract Symbol","description":"Extract constant","actions":[{"name":"Extract Constant","description":"Extract constant","kind":"refactor.extract.constant","notApplicableReason":"Cannot extract empty range."}]},{"name":"Extract type","description":"Extract type","actions":[{"name":"Extract to typedef","description":"Extract to typedef","kind":"refactor.extract.typedef","notApplicableReason":"Selection is not a valid type node"},{"name":"Extract to type alias","description":"Extract to type alias","kind":"refactor.extract.type","notApplicableReason":"Selection is not a valid type node"},{"name":"Extract to interface","description":"Extract to interface","kind":"refactor.extract.interface","notApplicableReason":"Selection is not a valid type node"}]},{"name":"Move to a new file","description":"Move to a new file","actions":[{"name":"Move to a new file","description":"Move to a new file","kind":"refactor.move.newFile","notApplicableReason":"Selection is not a valid statement or statements"}]},{"name":"Add or remove braces in an arrow function","description":"Add or remove braces in an arrow function","actions":[{"name":"Add braces to arrow function","description":"Add braces to arrow function","kind":"refactor.rewrite.arrow.braces.add","notApplicableReason":"Could not find a containing arrow function"},{"name":"Remove braces from arrow function","description":"Remove braces from arrow function","kind":"refactor.rewrite.arrow.braces.remove","notApplicableReason":"Could not find a containing arrow function"}]},{"name":"Convert to template string","description":"Convert to template string","actions":[{"name":"Convert to template string","description":"Convert to template string","kind":"refactor.rewrite.string","notApplicableReason":"Can only convert string concatenation"}]},{"name":"Infer function return type","description":"Infer function return type","actions":[{"name":"Infer function return type","description":"Infer function return type","kind":"refactor.rewrite.function.returnType","notApplicableReason":"Return type must be inferred from a function"}]}]}
Info 1792 [21:38:25.068] request:
    {
      "seq": 237,
      "type": "request",
      "command": "projectInfo",
      "arguments": {
        "file": "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx",
        "needFileNameList": false
      }
    }
Perf 1793 [21:38:25.068] 237::projectInfo: elapsed time (in milliseconds) 0.1462
Info 1794 [21:38:25.068] response:
    {"seq":0,"type":"response","command":"projectInfo","request_seq":237,"success":true,"body":{"configFileName":"/Users/jansedlon/Work/Designers-Trust/packages/client-remix/tsconfig.json","languageServiceDisabled":false}}
Info 1795 [21:38:25.365] request:
    {
      "seq": 238,
      "type": "request",
      "command": "geterr",
      "arguments": {
        "delay": 0,
        "files": [
          "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx",
          "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/features/pitch/components/admin-pitch-row.tsx"
        ]
      }
    }
Perf 1796 [21:38:25.365] 238::geterr: async elapsed time (in milliseconds) 0.1699
Info 1797 [21:38:25.366] event:
    {"seq":0,"type":"event","event":"syntaxDiag","body":{"file":"/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx","diagnostics":[]}}
Info 1798 [21:38:25.369] event:
    {"seq":0,"type":"event","event":"semanticDiag","body":{"file":"/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx","diagnostics":[{"start":{"line":180,"offset":3},"end":{"line":180,"offset":6},"text":"Parameter 'ref' implicitly has an 'any' type.","code":7006,"category":"error"},{"start":{"line":200,"offset":5},"end":{"line":200,"offset":23},"text":"Object is possibly 'null'.","code":2531,"category":"error"},{"start":{"line":211,"offset":29},"end":{"line":211,"offset":34},"text":"Property 'focus' does not exist on type 'never'.","code":2339,"category":"error"},{"start":{"line":229,"offset":25},"end":{"line":229,"offset":30},"text":"Property 'focus' does not exist on type 'never'.","code":2339,"category":"error"},{"start":{"line":235,"offset":27},"end":{"line":235,"offset":32},"text":"Parameter 'child' implicitly has an 'any' type.","code":7006,"category":"error"},{"start":{"line":252,"offset":12},"end":{"line":252,"offset":17},"text":"'React' refers to a UMD global, but the current file is a module. Consider adding an import instead.","code":2686,"category":"error"},{"start":{"line":316,"offset":15},"end":{"line":316,"offset":20},"text":"Type 'unknown' is not assignable to type 'string | number | readonly string[] | undefined'.\n  Type 'unknown' is not assignable to type 'readonly string[]'.","code":2322,"category":"error","relatedInformation":[{"span":{"start":{"line":2232,"offset":9},"end":{"line":2232,"offset":14},"file":"/Users/jansedlon/Work/Designers-Trust/node_modules/@types/react/index.d.ts"},"message":"The expected type comes from property 'value' which is declared here on type 'DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>'","category":"message","code":6500}]},{"start":{"line":330,"offset":13},"end":{"line":330,"offset":18},"text":"Type '{ placeholder: string | undefined; disabled: boolean; error: boolean; 'aria-invalid': true | undefined; defaultValue: string | number | readonly string[] | undefined; ref: Ref<any>; value: string | number | readonly string[] | undefined; required: boolean; }' is not assignable to type 'IntrinsicAttributes & MUIStyledCommonProps<Theme> & { select?: boolean | undefined; } & ClassAttributes<HTMLInputElement> & InputHTMLAttributes<HTMLInputElement> & { children?: ReactNode; }'.\n  Property 'error' does not exist on type 'IntrinsicAttributes & MUIStyledCommonProps<Theme> & { select?: boolean | undefined; } & ClassAttributes<HTMLInputElement> & InputHTMLAttributes<HTMLInputElement> & { children?: ReactNode; }'.","code":2322,"category":"error"}]}}
Info 1799 [21:38:25.370] event:
    {"seq":0,"type":"event","event":"suggestionDiag","body":{"file":"/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx","diagnostics":[{"start":{"line":185,"offset":5},"end":{"line":185,"offset":12},"text":"'focused' is declared but its value is never read.","code":6133,"category":"suggestion","reportsUnnecessary":true},{"start":{"line":188,"offset":5},"end":{"line":188,"offset":23},"text":"'formControlContext' is declared but its value is never read.","code":6133,"category":"suggestion","reportsUnnecessary":true},{"start":{"line":352,"offset":7},"end":{"line":352,"offset":8},"text":"'a' is declared but its value is never read.","code":6133,"category":"suggestion","reportsUnnecessary":true}]}}
Info 1800 [21:38:25.371] event:
    {"seq":0,"type":"event","event":"syntaxDiag","body":{"file":"/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/features/pitch/components/admin-pitch-row.tsx","diagnostics":[]}}
Info 1801 [21:38:25.372] event:
    {"seq":0,"type":"event","event":"semanticDiag","body":{"file":"/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/features/pitch/components/admin-pitch-row.tsx","diagnostics":[]}}
Info 1802 [21:38:25.372] event:
    {"seq":0,"type":"event","event":"suggestionDiag","body":{"file":"/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/features/pitch/components/admin-pitch-row.tsx","diagnostics":[]}}
Info 1803 [21:38:25.372] event:
    {"seq":0,"type":"event","event":"requestCompleted","body":{"request_seq":238}}
Info 1804 [21:38:25.553] request:
    {
      "seq": 239,
      "type": "request",
      "command": "provideInlayHints",
      "arguments": {
        "file": "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx",
        "start": 5684,
        "length": 2747
      }
    }
Perf 1805 [21:38:25.567] 239::provideInlayHints: elapsed time (in milliseconds) 13.6828
Info 1806 [21:38:25.567] response:
    {"seq":0,"type":"response","command":"provideInlayHints","request_seq":239,"success":true,"body":[{"text":"render:","position":{"line":163,"offset":37},"kind":"Parameter","whitespaceAfter":true},{"text":": Element","position":{"line":181,"offset":2},"kind":"Type","whitespaceBefore":true},{"text":"callbackfn:","position":{"line":251,"offset":36},"kind":"Parameter","whitespaceAfter":true},{"text":": ReactChild | ReactFragment ...","position":{"line":251,"offset":41},"kind":"Type","whitespaceBefore":true},{"text":"a:","position":{"line":256,"offset":39},"kind":"Parameter","whitespaceAfter":true},{"text":"b:","position":{"line":256,"offset":46},"kind":"Parameter","whitespaceAfter":true},{"text":"element:","position":{"line":260,"offset":27},"kind":"Parameter","whitespaceAfter":true},{"text":"props:","position":{"line":260,"offset":34},"kind":"Parameter","whitespaceAfter":true},{"text":": void","position":{"line":262,"offset":40},"kind":"Type","whitespaceBefore":true},{"text":"display:","position":{"line":302,"offset":34},"kind":"Parameter","whitespaceAfter":true},{"text":"display:","position":{"line":306,"offset":24},"kind":"Parameter","whitespaceAfter":true},{"text":": void","position":{"line":315,"offset":27},"kind":"Type","whitespaceBefore":true},{"text":": void","position":{"line":343,"offset":22},"kind":"Type","whitespaceBefore":true},{"text":"value:","position":{"line":343,"offset":39},"kind":"Parameter","whitespaceAfter":true}]}
Info 1807 [21:38:27.789] request:
    {
      "seq": 240,
      "type": "request",
      "command": "updateOpen",
      "arguments": {
        "changedFiles": [
          {
            "fileName": "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx",
            "textChanges": [
              {
                "newText": "a",
                "start": {
                  "line": 353,
                  "offset": 1
                },
                "end": {
                  "line": 353,
                  "offset": 1
                }
              }
            ]
          }
        ],
        "closedFiles": [],
        "openFiles": []
      }
    }
Perf 1808 [21:38:27.789] 240::updateOpen: elapsed time (in milliseconds) 0.1554
Info 1809 [21:38:27.789] response:
    {"seq":0,"type":"response","command":"updateOpen","request_seq":240,"success":true,"body":true}
Info 1810 [21:38:27.797] request:
    {
      "seq": 242,
      "type": "request",
      "command": "updateOpen",
      "arguments": {
        "changedFiles": [
          {
            "fileName": "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx",
            "textChanges": [
              {
                "newText": ".",
                "start": {
                  "line": 353,
                  "offset": 2
                },
                "end": {
                  "line": 353,
                  "offset": 2
                }
              }
            ]
          }
        ],
        "closedFiles": [],
        "openFiles": []
      }
    }
Perf 1811 [21:38:27.797] 242::updateOpen: elapsed time (in milliseconds) 0.2435
Info 1812 [21:38:27.797] response:
    {"seq":0,"type":"response","command":"updateOpen","request_seq":242,"success":true,"body":true}
Info 1813 [21:38:27.802] request:
    {
      "seq": 243,
      "type": "request",
      "command": "completionInfo",
      "arguments": {
        "file": "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx",
        "line": 353,
        "offset": 3,
        "includeExternalModuleExports": true,
        "includeInsertTextCompletions": true,
        "triggerCharacter": ".",
        "triggerKind": 2
      }
    }
Info 1814 [21:38:27.803] Starting updateGraphWorker: Project: /Users/jansedlon/Work/Designers-Trust/packages/client-remix/tsconfig.json
Info 1815 [21:38:27.823] Finishing updateGraphWorker: Project: /Users/jansedlon/Work/Designers-Trust/packages/client-remix/tsconfig.json Version: 33 structureChanged: false structureIsReused:: Completely Elapsed: 20.900458097457886ms
Info 1816 [21:38:27.823] Different program with same set of files
Info 1817 [21:38:27.824] getCompletionData: Get current token: 0.002875089645385742
Info 1818 [21:38:27.824] getCompletionData: Is inside comment: 0.009582996368408203
Info 1819 [21:38:27.824] getCompletionData: Get previous token: 0.007791996002197266
Info 1820 [21:38:27.824] getCompletionsAtPosition: isCompletionListBlocker: 0.0017499923706054688
Info 1821 [21:38:27.824] getCompletionData: Semantic work: 0.1750420331954956
Info 1822 [21:38:27.825] getCompletionsAtPosition: getCompletionEntriesFromSymbols: 0.5693750381469727
Info 1823 [21:38:27.826] IntelliCode plugin: program found
Info 1824 [21:38:27.826] IntelliCode plugin: source file found
Info 1825 [21:38:27.826] IntelliCode plugin: determined type: number
Info 1826 [21:38:28.305] IntelliCode plugin: prior accesses: 
Info 1827 [21:38:28.305] IntelliCode plugin: sequences: N
Info 1828 [21:38:28.305] IntelliCode plugin: sequences: N
Info 1829 [21:38:28.305] IntelliCode plugin: found some suggestion stuff
Info 1830 [21:38:28.305] IntelliCode plugin: found suggestions for sequence N : toFixed,should,toPrecision,length,call,left
Info 1831 [21:38:28.305] IntelliCode plugin: marking recommendation toFixed
Info 1832 [21:38:28.305] IntelliCode plugin: sort text for entry ★ toFixed is *a 11
Info 1833 [21:38:28.305] IntelliCode plugin: marking recommendation toPrecision
Info 1834 [21:38:28.305] IntelliCode plugin: sort text for entry ★ toPrecision is *c 11
Info 1835 [21:38:28.305] IntelliCode plugin: adding item metadata ★ toFixed => {"Id":1644093508305,"Index":0,"Method":"toFixed"} to completion result
Info 1836 [21:38:28.305] IntelliCode plugin: adding item metadata ★ toPrecision => {"Id":1644093508305,"Index":1,"Method":"toPrecision"} to completion result
Info 1837 [21:38:28.305] IntelliCode plugin: adding item metadata toExponential => {"Id":1644093508305,"Index":2,"Method":""} to completion result
Info 1838 [21:38:28.305] IntelliCode plugin: adding item metadata toLocaleString => {"Id":1644093508305,"Index":3,"Method":""} to completion result
Info 1839 [21:38:28.306] IntelliCode plugin: adding item metadata toString => {"Id":1644093508305,"Index":4,"Method":""} to completion result
Info 1840 [21:38:28.306] IntelliCode plugin: adding item metadata valueOf => {"Id":1644093508305,"Index":5,"Method":""} to completion result
Info 1841 [21:38:28.306] IntelliCode plugin: added metadata {"Id":1644093508305,"ModelVersion":"typescript_1.5","Count":2,"FailureReason":"None","Class":"number","InIf":false,"ElapsedTime":479.82475,"Methods":["toFixed","toPrecision"],"PrevInvoc":"N","ItemMetadata":{"★ toFixed":{"Id":1644093508305,"Index":0,"Method":"toFixed"},"★ toPrecision":{"Id":1644093508305,"Index":1,"Method":"toPrecision"},"toExponential":{"Id":1644093508305,"Index":2,"Method":""},"toLocaleString":{"Id":1644093508305,"Index":3,"Method":""},"toString":{"Id":1644093508305,"Index":4,"Method":""},"valueOf":{"Id":1644093508305,"Index":5,"Method":""}},"ModelType":"Frequency"} to completion result
Perf 1842 [21:38:28.306] 243::completionInfo: elapsed time (in milliseconds) 503.2643
Info 1843 [21:38:28.306] response:
    {"seq":0,"type":"response","command":"completionInfo","request_seq":243,"success":true,"performanceData":{"updateGraphDurationMs":20.900458097457886},"body":{"isGlobalCompletion":false,"isMemberCompletion":true,"isNewIdentifierLocation":false,"entries":[{"name":"★ toFixed","kind":"method","kindModifiers":"declare","sortText":"*a 11","insertText":"toFixed"},{"name":"★ toPrecision","kind":"method","kindModifiers":"declare","sortText":"*c 11","insertText":"toPrecision"},{"name":"toExponential","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"toLocaleString","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"toString","kind":"method","kindModifiers":"declare","sortText":"11"},{"name":"valueOf","kind":"method","kindModifiers":"declare","sortText":"11"}]},"metadata":{"Id":1644093508305,"ModelVersion":"typescript_1.5","Count":2,"FailureReason":"None","Class":"number","InIf":false,"ElapsedTime":479.82475,"Methods":["toFixed","toPrecision"],"PrevInvoc":"N","ItemMetadata":{"★ toFixed":{"Id":1644093508305,"Index":0,"Method":"toFixed"},"★ toPrecision":{"Id":1644093508305,"Index":1,"Method":"toPrecision"},"toExponential":{"Id":1644093508305,"Index":2,"Method":""},"toLocaleString":{"Id":1644093508305,"Index":3,"Method":""},"toString":{"Id":1644093508305,"Index":4,"Method":""},"valueOf":{"Id":1644093508305,"Index":5,"Method":""}},"ModelType":"Frequency"}}
Info 1844 [21:38:28.306] request:
    {
      "seq": 244,
      "type": "request",
      "command": "getApplicableRefactors",
      "arguments": {
        "file": "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx",
        "startLine": 353,
        "startOffset": 3,
        "endLine": 353,
        "endOffset": 3
      }
    }
Perf 1845 [21:38:28.306] 244::getApplicableRefactors: elapsed time (in milliseconds) 0.2750
Info 1846 [21:38:28.306] response:
    {"seq":0,"type":"response","command":"getApplicableRefactors","request_seq":244,"success":true,"body":[{"name":"Convert export","description":"Convert default export to named export","actions":[{"name":"Convert default export to named export","description":"Convert default export to named export","kind":"refactor.rewrite.export.named","notApplicableReason":"This file already has a default export"},{"name":"Convert named export to default export","description":"Convert named export to default export","kind":"refactor.rewrite.export.default","notApplicableReason":"This file already has a default export"}]},{"name":"Convert import","description":"Convert namespace import to named imports","actions":[{"name":"Convert namespace import to named imports","description":"Convert namespace import to named imports","kind":"refactor.rewrite.import.named","notApplicableReason":"Selection is not an import declaration."}]},{"name":"Convert import","description":"Convert named imports to namespace import","actions":[{"name":"Convert named imports to namespace import","description":"Convert named imports to namespace import","kind":"refactor.rewrite.import.namespace","notApplicableReason":"Selection is not an import declaration."}]},{"name":"Extract Symbol","description":"Extract function","actions":[{"name":"Extract Function","description":"Extract function","kind":"refactor.extract.function","notApplicableReason":"Cannot extract empty range."}]},{"name":"Extract Symbol","description":"Extract constant","actions":[{"name":"Extract Constant","description":"Extract constant","kind":"refactor.extract.constant","notApplicableReason":"Cannot extract empty range."}]},{"name":"Extract type","description":"Extract type","actions":[{"name":"Extract to typedef","description":"Extract to typedef","kind":"refactor.extract.typedef","notApplicableReason":"Selection is not a valid type node"},{"name":"Extract to type alias","description":"Extract to type alias","kind":"refactor.extract.type","notApplicableReason":"Selection is not a valid type node"},{"name":"Extract to interface","description":"Extract to interface","kind":"refactor.extract.interface","notApplicableReason":"Selection is not a valid type node"}]},{"name":"Generate 'get' and 'set' accessors","description":"Generate 'get' and 'set' accessors","actions":[{"name":"Generate 'get' and 'set' accessors","description":"Generate 'get' and 'set' accessors","kind":"refactor.rewrite.property.generateAccessors","notApplicableReason":"Could not find property for which to generate accessor"}]},{"name":"Move to a new file","description":"Move to a new file","actions":[{"name":"Move to a new file","description":"Move to a new file","kind":"refactor.move.newFile","notApplicableReason":"Selection is not a valid statement or statements"}]},{"name":"Add or remove braces in an arrow function","description":"Add or remove braces in an arrow function","actions":[{"name":"Add braces to arrow function","description":"Add braces to arrow function","kind":"refactor.rewrite.arrow.braces.add","notApplicableReason":"Could not find a containing arrow function"},{"name":"Remove braces from arrow function","description":"Remove braces from arrow function","kind":"refactor.rewrite.arrow.braces.remove","notApplicableReason":"Could not find a containing arrow function"}]},{"name":"Convert to template string","description":"Convert to template string","actions":[{"name":"Convert to template string","description":"Convert to template string","kind":"refactor.rewrite.string","notApplicableReason":"Can only convert string concatenation"}]},{"name":"Infer function return type","description":"Infer function return type","actions":[{"name":"Infer function return type","description":"Infer function return type","kind":"refactor.rewrite.function.returnType","notApplicableReason":"Return type must be inferred from a function"}]}]}
Info 1847 [21:38:28.306] request:
    {
      "seq": 245,
      "type": "request",
      "command": "geterr",
      "arguments": {
        "delay": 0,
        "files": [
          "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx",
          "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/features/pitch/components/admin-pitch-row.tsx"
        ]
      }
    }
Perf 1848 [21:38:28.307] 245::geterr: async elapsed time (in milliseconds) 0.0973
Info 1849 [21:38:28.307] event:
    {"seq":0,"type":"event","event":"syntaxDiag","body":{"file":"/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx","diagnostics":[{"start":{"line":353,"offset":3},"end":{"line":353,"offset":3},"text":"Identifier expected.","code":1003,"category":"error"}]}}
Info 1850 [21:38:28.328] event:
    {"seq":0,"type":"event","event":"requestCompleted","body":{"request_seq":245}}
Info 1851 [21:38:28.328] request:
    {
      "seq": 246,
      "type": "request",
      "command": "completionEntryDetails",
      "arguments": {
        "file": "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx",
        "line": 353,
        "offset": 3,
        "entryNames": [
          "toString"
        ]
      }
    }
Info 1852 [21:38:28.333] getCompletionData: Get current token: 0.006667017936706543
Info 1853 [21:38:28.333] getCompletionData: Is inside comment: 0.01666700839996338
Info 1854 [21:38:28.333] getCompletionData: Get previous token: 0.008834004402160645
Info 1855 [21:38:28.333] getCompletionsAtPosition: isCompletionListBlocker: 0.0017080307006835938
Info 1856 [21:38:28.334] getCompletionData: Semantic work: 0.1452500820159912
Perf 1857 [21:38:28.354] 246::completionEntryDetails: elapsed time (in milliseconds) 25.4330
Info 1858 [21:38:28.354] response:
    {"seq":0,"type":"response","command":"completionEntryDetails","request_seq":246,"success":true,"body":[{"name":"toString","kindModifiers":"declare","kind":"method","displayParts":[{"text":"(","kind":"punctuation"},{"text":"method","kind":"text"},{"text":")","kind":"punctuation"},{"text":" ","kind":"space"},{"text":"Number","kind":"localName"},{"text":".","kind":"punctuation"},{"text":"toString","kind":"methodName"},{"text":"(","kind":"punctuation"},{"text":"radix","kind":"parameterName"},{"text":"?","kind":"punctuation"},{"text":":","kind":"punctuation"},{"text":" ","kind":"space"},{"text":"number","kind":"keyword"},{"text":" ","kind":"space"},{"text":"|","kind":"punctuation"},{"text":" ","kind":"space"},{"text":"undefined","kind":"keyword"},{"text":")","kind":"punctuation"},{"text":":","kind":"punctuation"},{"text":" ","kind":"space"},{"text":"string","kind":"keyword"}],"documentation":[{"text":"Returns a string representation of an object.","kind":"text"}],"tags":[{"name":"param","text":[{"text":"radix","kind":"parameterName"},{"text":" ","kind":"space"},{"text":"Specifies a radix for converting numeric values to strings. This value is only used for numbers.","kind":"text"}]}]}]}
Info 1859 [21:38:28.519] request:
    {
      "seq": 247,
      "type": "request",
      "command": "geterr",
      "arguments": {
        "delay": 0,
        "files": [
          "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/features/pitch/components/admin-pitch-row.tsx",
          "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx"
        ]
      }
    }
Perf 1860 [21:38:28.519] 247::geterr: async elapsed time (in milliseconds) 0.1631
Info 1861 [21:38:28.520] event:
    {"seq":0,"type":"event","event":"syntaxDiag","body":{"file":"/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/features/pitch/components/admin-pitch-row.tsx","diagnostics":[]}}
Info 1862 [21:38:28.729] event:
    {"seq":0,"type":"event","event":"requestCompleted","body":{"request_seq":247}}
Info 1863 [21:38:28.730] request:
    {
      "seq": 248,
      "type": "request",
      "command": "getApplicableRefactors",
      "arguments": {
        "file": "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx",
        "startLine": 353,
        "startOffset": 3,
        "endLine": 353,
        "endOffset": 3
      }
    }
Perf 1864 [21:38:28.734] 248::getApplicableRefactors: elapsed time (in milliseconds) 3.6461
Info 1865 [21:38:28.734] response:
    {"seq":0,"type":"response","command":"getApplicableRefactors","request_seq":248,"success":true,"body":[{"name":"Convert export","description":"Convert default export to named export","actions":[{"name":"Convert default export to named export","description":"Convert default export to named export","kind":"refactor.rewrite.export.named","notApplicableReason":"This file already has a default export"},{"name":"Convert named export to default export","description":"Convert named export to default export","kind":"refactor.rewrite.export.default","notApplicableReason":"This file already has a default export"}]},{"name":"Convert import","description":"Convert namespace import to named imports","actions":[{"name":"Convert namespace import to named imports","description":"Convert namespace import to named imports","kind":"refactor.rewrite.import.named","notApplicableReason":"Selection is not an import declaration."}]},{"name":"Convert import","description":"Convert named imports to namespace import","actions":[{"name":"Convert named imports to namespace import","description":"Convert named imports to namespace import","kind":"refactor.rewrite.import.namespace","notApplicableReason":"Selection is not an import declaration."}]},{"name":"Extract Symbol","description":"Extract function","actions":[{"name":"Extract Function","description":"Extract function","kind":"refactor.extract.function","notApplicableReason":"Cannot extract empty range."}]},{"name":"Extract Symbol","description":"Extract constant","actions":[{"name":"Extract Constant","description":"Extract constant","kind":"refactor.extract.constant","notApplicableReason":"Cannot extract empty range."}]},{"name":"Extract type","description":"Extract type","actions":[{"name":"Extract to typedef","description":"Extract to typedef","kind":"refactor.extract.typedef","notApplicableReason":"Selection is not a valid type node"},{"name":"Extract to type alias","description":"Extract to type alias","kind":"refactor.extract.type","notApplicableReason":"Selection is not a valid type node"},{"name":"Extract to interface","description":"Extract to interface","kind":"refactor.extract.interface","notApplicableReason":"Selection is not a valid type node"}]},{"name":"Generate 'get' and 'set' accessors","description":"Generate 'get' and 'set' accessors","actions":[{"name":"Generate 'get' and 'set' accessors","description":"Generate 'get' and 'set' accessors","kind":"refactor.rewrite.property.generateAccessors","notApplicableReason":"Could not find property for which to generate accessor"}]},{"name":"Move to a new file","description":"Move to a new file","actions":[{"name":"Move to a new file","description":"Move to a new file","kind":"refactor.move.newFile","notApplicableReason":"Selection is not a valid statement or statements"}]},{"name":"Add or remove braces in an arrow function","description":"Add or remove braces in an arrow function","actions":[{"name":"Add braces to arrow function","description":"Add braces to arrow function","kind":"refactor.rewrite.arrow.braces.add","notApplicableReason":"Could not find a containing arrow function"},{"name":"Remove braces from arrow function","description":"Remove braces from arrow function","kind":"refactor.rewrite.arrow.braces.remove","notApplicableReason":"Could not find a containing arrow function"}]},{"name":"Convert to template string","description":"Convert to template string","actions":[{"name":"Convert to template string","description":"Convert to template string","kind":"refactor.rewrite.string","notApplicableReason":"Can only convert string concatenation"}]},{"name":"Infer function return type","description":"Infer function return type","actions":[{"name":"Infer function return type","description":"Infer function return type","kind":"refactor.rewrite.function.returnType","notApplicableReason":"Return type must be inferred from a function"}]}]}
Info 1866 [21:38:28.734] request:
    {
      "seq": 249,
      "type": "request",
      "command": "getCodeFixes",
      "arguments": {
        "file": "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx",
        "startLine": 353,
        "startOffset": 3,
        "endLine": 353,
        "endOffset": 3,
        "errorCodes": [
          1003
        ]
      }
    }
Perf 1867 [21:38:29.382] 249::getCodeFixes: elapsed time (in milliseconds) 647.4859
Info 1868 [21:38:29.382] response:
    {"seq":0,"type":"response","command":"getCodeFixes","request_seq":249,"success":true,"body":[]}
Info 1869 [21:38:29.383] request:
    {
      "seq": 250,
      "type": "request",
      "command": "geterr",
      "arguments": {
        "delay": 0,
        "files": [
          "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/features/pitch/components/admin-pitch-row.tsx",
          "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx"
        ]
      }
    }
Perf 1870 [21:38:29.383] 250::geterr: async elapsed time (in milliseconds) 0.0918
Info 1871 [21:38:29.383] request:
    {
      "seq": 251,
      "type": "request",
      "command": "provideInlayHints",
      "arguments": {
        "file": "/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx",
        "start": 5684,
        "length": 2749
      }
    }
Perf 1872 [21:38:29.883] 251::provideInlayHints: elapsed time (in milliseconds) 499.6440
Info 1873 [21:38:29.883] response:
    {"seq":0,"type":"response","command":"provideInlayHints","request_seq":251,"success":true,"body":[{"text":"render:","position":{"line":163,"offset":37},"kind":"Parameter","whitespaceAfter":true},{"text":": Element","position":{"line":181,"offset":2},"kind":"Type","whitespaceBefore":true},{"text":"callbackfn:","position":{"line":251,"offset":36},"kind":"Parameter","whitespaceAfter":true},{"text":": ReactChild | ReactFragment ...","position":{"line":251,"offset":41},"kind":"Type","whitespaceBefore":true},{"text":"a:","position":{"line":256,"offset":39},"kind":"Parameter","whitespaceAfter":true},{"text":"b:","position":{"line":256,"offset":46},"kind":"Parameter","whitespaceAfter":true},{"text":"element:","position":{"line":260,"offset":27},"kind":"Parameter","whitespaceAfter":true},{"text":"props:","position":{"line":260,"offset":34},"kind":"Parameter","whitespaceAfter":true},{"text":": void","position":{"line":262,"offset":40},"kind":"Type","whitespaceBefore":true},{"text":"display:","position":{"line":302,"offset":34},"kind":"Parameter","whitespaceAfter":true},{"text":"display:","position":{"line":306,"offset":24},"kind":"Parameter","whitespaceAfter":true},{"text":": void","position":{"line":315,"offset":27},"kind":"Type","whitespaceBefore":true},{"text":": void","position":{"line":343,"offset":22},"kind":"Type","whitespaceBefore":true},{"text":"value:","position":{"line":343,"offset":39},"kind":"Parameter","whitespaceAfter":true}]}
Info 1874 [21:38:29.883] event:
    {"seq":0,"type":"event","event":"syntaxDiag","body":{"file":"/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/features/pitch/components/admin-pitch-row.tsx","diagnostics":[]}}
Info 1875 [21:38:30.117] event:
    {"seq":0,"type":"event","event":"semanticDiag","body":{"file":"/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/features/pitch/components/admin-pitch-row.tsx","diagnostics":[]}}
Info 1876 [21:38:30.117] event:
    {"seq":0,"type":"event","event":"suggestionDiag","body":{"file":"/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/features/pitch/components/admin-pitch-row.tsx","diagnostics":[]}}
Info 1877 [21:38:30.118] event:
    {"seq":0,"type":"event","event":"syntaxDiag","body":{"file":"/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx","diagnostics":[{"start":{"line":353,"offset":3},"end":{"line":353,"offset":3},"text":"Identifier expected.","code":1003,"category":"error"}]}}
Info 1878 [21:38:30.121] event:
    {"seq":0,"type":"event","event":"semanticDiag","body":{"file":"/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx","diagnostics":[{"start":{"line":180,"offset":3},"end":{"line":180,"offset":6},"text":"Parameter 'ref' implicitly has an 'any' type.","code":7006,"category":"error"},{"start":{"line":200,"offset":5},"end":{"line":200,"offset":23},"text":"Object is possibly 'null'.","code":2531,"category":"error"},{"start":{"line":211,"offset":29},"end":{"line":211,"offset":34},"text":"Property 'focus' does not exist on type 'never'.","code":2339,"category":"error"},{"start":{"line":229,"offset":25},"end":{"line":229,"offset":30},"text":"Property 'focus' does not exist on type 'never'.","code":2339,"category":"error"},{"start":{"line":235,"offset":27},"end":{"line":235,"offset":32},"text":"Parameter 'child' implicitly has an 'any' type.","code":7006,"category":"error"},{"start":{"line":252,"offset":12},"end":{"line":252,"offset":17},"text":"'React' refers to a UMD global, but the current file is a module. Consider adding an import instead.","code":2686,"category":"error"},{"start":{"line":316,"offset":15},"end":{"line":316,"offset":20},"text":"Type 'unknown' is not assignable to type 'string | number | readonly string[] | undefined'.\n  Type 'unknown' is not assignable to type 'readonly string[]'.","code":2322,"category":"error","relatedInformation":[{"span":{"start":{"line":2232,"offset":9},"end":{"line":2232,"offset":14},"file":"/Users/jansedlon/Work/Designers-Trust/node_modules/@types/react/index.d.ts"},"message":"The expected type comes from property 'value' which is declared here on type 'DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>'","category":"message","code":6500}]},{"start":{"line":330,"offset":13},"end":{"line":330,"offset":18},"text":"Type '{ placeholder: string | undefined; disabled: boolean; error: boolean; 'aria-invalid': true | undefined; defaultValue: string | number | readonly string[] | undefined; ref: Ref<any>; value: string | number | readonly string[] | undefined; required: boolean; }' is not assignable to type 'IntrinsicAttributes & MUIStyledCommonProps<Theme> & { select?: boolean | undefined; } & ClassAttributes<HTMLInputElement> & InputHTMLAttributes<HTMLInputElement> & { children?: ReactNode; }'.\n  Property 'error' does not exist on type 'IntrinsicAttributes & MUIStyledCommonProps<Theme> & { select?: boolean | undefined; } & ClassAttributes<HTMLInputElement> & InputHTMLAttributes<HTMLInputElement> & { children?: ReactNode; }'.","code":2322,"category":"error"}]}}
Info 1879 [21:38:30.122] event:
    {"seq":0,"type":"event","event":"suggestionDiag","body":{"file":"/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx","diagnostics":[{"start":{"line":185,"offset":5},"end":{"line":185,"offset":12},"text":"'focused' is declared but its value is never read.","code":6133,"category":"suggestion","reportsUnnecessary":true},{"start":{"line":188,"offset":5},"end":{"line":188,"offset":23},"text":"'formControlContext' is declared but its value is never read.","code":6133,"category":"suggestion","reportsUnnecessary":true}]}}
Info 1880 [21:38:30.122] event:
    {"seq":0,"type":"event","event":"requestCompleted","body":{"request_seq":250}}

SublimeText

:: <-  LSP-typescript textDocument/publishDiagnostics: {'diagnostics': [{'range': {'start': {'line': 179, 'character': 2}, 'end': {'line': 179, 'character': 5}}, 'message': "Parameter 'ref' implicitly has an 'any' type.", 'tags': [], 'severity': 1, 'code': 7006, 'source': 'typescript'}, {'range': {'start': {'line': 199, 'character': 4}, 'end': {'line': 199, 'character': 22}}, 'message': "Object is possibly 'null'.", 'tags': [], 'severity': 1, 'code': 2531, 'source': 'typescript'}, {'range': {'start': {'line': 210, 'character': 28}, 'end': {'line': 210, 'character': 33}}, 'message': "Property 'focus' does not exist on type 'never'.", 'tags': [], 'severity': 1, 'code': 2339, 'source': 'typescript'}, {'range': {'start': {'line': 228, 'character': 24}, 'end': {'line': 228, 'character': 29}}, 'message': "Property 'focus' does not exist on type 'never'.", 'tags': [], 'severity': 1, 'code': 2339, 'source': 'typescript'}, {'range': {'start': {'line': 234, 'character': 26}, 'end': {'line': 234, 'character': 31}}, 'message': "Parameter 'child' implicitly has an 'any' type.", 'tags': [], 'severity': 1, 'code': 7006, 'source': 'typescript'}, {'range': {'start': {'line': 251, 'character': 11}, 'end': {'line': 251, 'character': 16}}, 'message': "'React' refers to a UMD global, but the current file is a module. Consider adding an import instead.", 'tags': [], 'severity': 1, 'code': 2686, 'source': 'typescript'}, {'range': {'start': {'line': 315, 'character': 14}, 'end': {'line': 315, 'character': 19}}, 'message': "Type 'unknown' is not assignable to type 'string | number | readonly string[] | undefined'.\n  Type 'unknown' is not assignable to type 'readonly string[]'.", 'relatedInformation': [{'location': {'range': {'start': {'line': 2231, 'character': 8}, 'end': {'line': 2231, 'character': 13}}, 'uri': 'file:///Users/jansedlon/Work/Designers-Trust/node_modules/%40types/react/index.d.ts'}, 'message': "The expected type comes from property 'value' which is declared here on type 'DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>'"}], 'severity': 1, 'code': 2322, 'source': 'typescript', 'tags': []}, {'range': {'start': {'line': 329, 'character': 12}, 'end': {'line': 329, 'character': 17}}, 'message': "Type '{ placeholder: string | undefined; disabled: boolean; error: boolean; 'aria-invalid': true | undefined; defaultValue: string | number | readonly string[] | undefined; ref: Ref<any>; value: string | number | readonly string[] | undefined; required: boolean; }' is not assignable to type 'IntrinsicAttributes & MUIStyledCommonProps<Theme> & { select?: boolean | undefined; } & ClassAttributes<HTMLInputElement> & InputHTMLAttributes<HTMLInputElement> & { children?: ReactNode; }'.\n  Property 'error' does not exist on type 'IntrinsicAttributes & MUIStyledCommonProps<Theme> & { select?: boolean | undefined; } & ClassAttributes<HTMLInputElement> & InputHTMLAttributes<HTMLInputElement> & { children?: ReactNode; }'.", 'tags': [], 'severity': 1, 'code': 2322, 'source': 'typescript'}, {'range': {'start': {'line': 184, 'character': 4}, 'end': {'line': 184, 'character': 11}}, 'message': "'focused' is declared but its value is never read.", 'tags': [1], 'severity': 4, 'code': 6133, 'source': 'typescript'}, {'range': {'start': {'line': 187, 'character': 4}, 'end': {'line': 187, 'character': 22}}, 'message': "'formControlContext' is declared but its value is never read.", 'tags': [1], 'severity': 4, 'code': 6133, 'source': 'typescript'}, {'range': {'start': {'line': 351, 'character': 6}, 'end': {'line': 351, 'character': 7}}, 'message': "'a' is declared but its value is never read.", 'tags': [1], 'severity': 4, 'code': 6133, 'source': 'typescript'}], 'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}
::  -> LSP-typescript textDocument/didChange: {'contentChanges': [{'range': {'start': {'line': 352, 'character': 0}, 'end': {'line': 352, 'character': 0}}, 'rangeLength': 0, 'text': 'a'}], 'textDocument': {'version': 171, 'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}}
::  -> LSP-eslint textDocument/didChange: {'contentChanges': [{'range': {'start': {'line': 352, 'character': 0}, 'end': {'line': 352, 'character': 0}}, 'rangeLength': 0, 'text': 'a'}], 'textDocument': {'version': 171, 'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}}
::  -> LSP-tailwindcss textDocument/didChange: <params with 9049 characters>
:: --> LSP-tailwindcss textDocument/documentColor(89): {'textDocument': {'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}}
:: --> LSP-typescript textDocument/completion(112): {'textDocument': {'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}, 'position': {'line': 352, 'character': 1}}
:: --> LSP-tailwindcss textDocument/completion(90): {'textDocument': {'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}, 'position': {'line': 352, 'character': 1}}
:: --> LSP-typescript typescript/inlayHints(113): {'textDocument': {'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}}
:: <<< LSP-tailwindcss 89: []
:: <<< LSP-tailwindcss 90: None
:: <-  LSP-eslint textDocument/publishDiagnostics: {'diagnostics': [{'range': {'start': {'line': 0, 'character': 0}, 'end': {'line': 0, 'character': 0}}, 'source': 'eslint', 'message': "Parsing error: Cannot read file '/users/jansedlon/work/designers-trust/tsconfig.json'.", 'severity': 1}], 'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}
:: --> LSP-typescript textDocument/codeAction(114): {'range': {'start': {'line': 352, 'character': 1}, 'end': {'line': 352, 'character': 1}}, 'context': {'diagnostics': []}, 'textDocument': {'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}}
:: --> LSP-eslint textDocument/codeAction(40): {'range': {'start': {'line': 352, 'character': 1}, 'end': {'line': 352, 'character': 1}}, 'context': {'diagnostics': []}, 'textDocument': {'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}}
:: --> LSP-tailwindcss textDocument/codeAction(91): {'range': {'start': {'line': 352, 'character': 1}, 'end': {'line': 352, 'character': 1}}, 'context': {'diagnostics': []}, 'textDocument': {'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}}
:: <-  LSP-eslint eslint/status: {'state': 1, 'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}
:: <<< LSP-eslint 40: []
:: <<< LSP-tailwindcss 91: []
:: <<< LSP-typescript 112: <params with 1425568 characters>
:: --> LSP-typescript textDocument/documentHighlight(115): {'textDocument': {'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}, 'position': {'line': 352, 'character': 1}}
:: <-  LSP-tailwindcss textDocument/publishDiagnostics: {'diagnostics': [], 'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}
::  -> LSP-typescript textDocument/didChange: {'contentChanges': [{'range': {'start': {'line': 352, 'character': 1}, 'end': {'line': 352, 'character': 1}}, 'rangeLength': 0, 'text': '.'}], 'textDocument': {'version': 172, 'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}}
::  -> LSP-eslint textDocument/didChange: {'contentChanges': [{'range': {'start': {'line': 352, 'character': 1}, 'end': {'line': 352, 'character': 1}}, 'rangeLength': 0, 'text': '.'}], 'textDocument': {'version': 172, 'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}}
::  -> LSP-tailwindcss textDocument/didChange: <params with 9050 characters>
:: --> LSP-tailwindcss textDocument/documentColor(92): {'textDocument': {'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}}
:: --> LSP-typescript textDocument/completion(116): {'textDocument': {'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}, 'position': {'line': 352, 'character': 2}}
:: --> LSP-tailwindcss textDocument/completion(93): {'textDocument': {'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}, 'position': {'line': 352, 'character': 2}}
:: --> LSP-typescript typescript/inlayHints(117): {'textDocument': {'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}}
:: <<< LSP-tailwindcss 92: []
:: <<< LSP-tailwindcss 93: None
:: <-  LSP-eslint textDocument/publishDiagnostics: {'diagnostics': [{'range': {'start': {'line': 0, 'character': 0}, 'end': {'line': 0, 'character': 0}}, 'source': 'eslint', 'message': "Parsing error: Cannot read file '/users/jansedlon/work/designers-trust/tsconfig.json'.", 'severity': 1}], 'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}
:: --> LSP-typescript textDocument/codeAction(118): {'range': {'start': {'line': 352, 'character': 2}, 'end': {'line': 352, 'character': 2}}, 'context': {'diagnostics': []}, 'textDocument': {'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}}
:: --> LSP-eslint textDocument/codeAction(41): {'range': {'start': {'line': 352, 'character': 2}, 'end': {'line': 352, 'character': 2}}, 'context': {'diagnostics': []}, 'textDocument': {'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}}
:: --> LSP-tailwindcss textDocument/codeAction(94): {'range': {'start': {'line': 352, 'character': 2}, 'end': {'line': 352, 'character': 2}}, 'context': {'diagnostics': []}, 'textDocument': {'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}}
:: <-  LSP-eslint eslint/status: {'state': 1, 'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}
:: <<< LSP-eslint 41: []
:: <<< LSP-tailwindcss 94: []
:: --> LSP-typescript textDocument/documentHighlight(119): {'textDocument': {'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}, 'position': {'line': 352, 'character': 2}}
:: <-  LSP-tailwindcss textDocument/publishDiagnostics: {'diagnostics': [], 'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}
:: <<< LSP-typescript 113: {'inlayHints': [{'kind': 'Type', 'position': {'line': 29, 'character': 25}, 'whitespaceBefore': True, 'text': ': PropertyKey'}, {'kind': 'Type', 'position': {'line': 34, 'character': 25}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 39, 'character': 25}, 'whitespaceBefore': True, 'text': ': PropertyKey'}, {'kind': 'Type', 'position': {'line': 42, 'character': 32}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 44, 'character': 21}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 52, 'character': 30}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 56, 'character': 23}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 61, 'character': 34}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 62, 'character': 35}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 66, 'character': 15}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 76, 'character': 25}, 'whitespaceBefore': True, 'text': ': PropertyKey'}, {'kind': 'Type', 'position': {'line': 95, 'character': 17}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 197, 'character': 43}, 'whitespaceBefore': True, 'text': ': any'}, {'kind': 'Type', 'position': {'line': 234, 'character': 31}, 'whitespaceBefore': True, 'text': ': any'}, {'kind': 'Type', 'position': {'line': 250, 'character': 40}, 'whitespaceBefore': True, 'text': ': ReactChild | ReactFragment ...'}]}
:: <<< LSP-typescript 114: []
:: <<< LSP-typescript 115: [{'kind': 2, 'range': {'start': {'line': 351, 'character': 6}, 'end': {'line': 351, 'character': 7}}}, {'kind': 2, 'range': {'start': {'line': 352, 'character': 0}, 'end': {'line': 352, 'character': 1}}}]
:: <<< LSP-typescript 116: {'isIncomplete': False, 'items': [{'insertTextFormat': 2, 'data': {'file': '/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx', 'offset': 3, 'entryNames': ['toExponential'], 'line': 353}, 'label': 'toExponential', 'kind': 2, 'sortText': '11', 'commitCharacters': ['.', ',', '(']}, {'insertTextFormat': 2, 'data': {'file': '/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx', 'offset': 3, 'entryNames': ['toFixed'], 'line': 353}, 'label': 'toFixed', 'kind': 2, 'sortText': '11', 'commitCharacters': ['.', ',', '(']}, {'insertTextFormat': 2, 'data': {'file': '/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx', 'offset': 3, 'entryNames': ['toLocaleString'], 'line': 353}, 'label': 'toLocaleString', 'kind': 2, 'sortText': '11', 'commitCharacters': ['.', ',', '(']}, {'insertTextFormat': 2, 'data': {'file': '/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx', 'offset': 3, 'entryNames': ['toPrecision'], 'line': 353}, 'label': 'toPrecision', 'kind': 2, 'sortText': '11', 'commitCharacters': ['.', ',', '(']}, {'insertTextFormat': 2, 'data': {'file': '/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx', 'offset': 3, 'entryNames': ['toString'], 'line': 353}, 'label': 'toString', 'kind': 2, 'sortText': '11', 'commitCharacters': ['.', ',', '(']}, {'insertTextFormat': 2, 'data': {'file': '/Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx', 'offset': 3, 'entryNames': ['valueOf'], 'line': 353}, 'label': 'valueOf', 'kind': 2, 'sortText': '11', 'commitCharacters': ['.', ',', '(']}]}
:: <<< LSP-typescript 119: []
:: <<< LSP-typescript 117: {'inlayHints': [{'kind': 'Type', 'position': {'line': 29, 'character': 25}, 'whitespaceBefore': True, 'text': ': PropertyKey'}, {'kind': 'Type', 'position': {'line': 34, 'character': 25}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 39, 'character': 25}, 'whitespaceBefore': True, 'text': ': PropertyKey'}, {'kind': 'Type', 'position': {'line': 42, 'character': 32}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 44, 'character': 21}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 52, 'character': 30}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 56, 'character': 23}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 61, 'character': 34}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 62, 'character': 35}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 66, 'character': 15}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 76, 'character': 25}, 'whitespaceBefore': True, 'text': ': PropertyKey'}, {'kind': 'Type', 'position': {'line': 95, 'character': 17}, 'whitespaceBefore': True, 'text': ': MUIStyledCommonProps<Theme>...'}, {'kind': 'Type', 'position': {'line': 197, 'character': 43}, 'whitespaceBefore': True, 'text': ': any'}, {'kind': 'Type', 'position': {'line': 234, 'character': 31}, 'whitespaceBefore': True, 'text': ': any'}, {'kind': 'Type', 'position': {'line': 250, 'character': 40}, 'whitespaceBefore': True, 'text': ': ReactChild | ReactFragment ...'}]}
:: <<< LSP-typescript 118: []
:: <-  LSP-typescript textDocument/publishDiagnostics: {'diagnostics': [{'range': {'start': {'line': 352, 'character': 2}, 'end': {'line': 352, 'character': 2}}, 'message': 'Identifier expected.', 'tags': [], 'severity': 1, 'code': 1003, 'source': 'typescript'}, {'range': {'start': {'line': 179, 'character': 2}, 'end': {'line': 179, 'character': 5}}, 'message': "Parameter 'ref' implicitly has an 'any' type.", 'tags': [], 'severity': 1, 'code': 7006, 'source': 'typescript'}, {'range': {'start': {'line': 199, 'character': 4}, 'end': {'line': 199, 'character': 22}}, 'message': "Object is possibly 'null'.", 'tags': [], 'severity': 1, 'code': 2531, 'source': 'typescript'}, {'range': {'start': {'line': 210, 'character': 28}, 'end': {'line': 210, 'character': 33}}, 'message': "Property 'focus' does not exist on type 'never'.", 'tags': [], 'severity': 1, 'code': 2339, 'source': 'typescript'}, {'range': {'start': {'line': 228, 'character': 24}, 'end': {'line': 228, 'character': 29}}, 'message': "Property 'focus' does not exist on type 'never'.", 'tags': [], 'severity': 1, 'code': 2339, 'source': 'typescript'}, {'range': {'start': {'line': 234, 'character': 26}, 'end': {'line': 234, 'character': 31}}, 'message': "Parameter 'child' implicitly has an 'any' type.", 'tags': [], 'severity': 1, 'code': 7006, 'source': 'typescript'}, {'range': {'start': {'line': 251, 'character': 11}, 'end': {'line': 251, 'character': 16}}, 'message': "'React' refers to a UMD global, but the current file is a module. Consider adding an import instead.", 'tags': [], 'severity': 1, 'code': 2686, 'source': 'typescript'}, {'range': {'start': {'line': 315, 'character': 14}, 'end': {'line': 315, 'character': 19}}, 'message': "Type 'unknown' is not assignable to type 'string | number | readonly string[] | undefined'.\n  Type 'unknown' is not assignable to type 'readonly string[]'.", 'relatedInformation': [{'location': {'range': {'start': {'line': 2231, 'character': 8}, 'end': {'line': 2231, 'character': 13}}, 'uri': 'file:///Users/jansedlon/Work/Designers-Trust/node_modules/%40types/react/index.d.ts'}, 'message': "The expected type comes from property 'value' which is declared here on type 'DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>'"}], 'severity': 1, 'code': 2322, 'source': 'typescript', 'tags': []}, {'range': {'start': {'line': 329, 'character': 12}, 'end': {'line': 329, 'character': 17}}, 'message': "Type '{ placeholder: string | undefined; disabled: boolean; error: boolean; 'aria-invalid': true | undefined; defaultValue: string | number | readonly string[] | undefined; ref: Ref<any>; value: string | number | readonly string[] | undefined; required: boolean; }' is not assignable to type 'IntrinsicAttributes & MUIStyledCommonProps<Theme> & { select?: boolean | undefined; } & ClassAttributes<HTMLInputElement> & InputHTMLAttributes<HTMLInputElement> & { children?: ReactNode; }'.\n  Property 'error' does not exist on type 'IntrinsicAttributes & MUIStyledCommonProps<Theme> & { select?: boolean | undefined; } & ClassAttributes<HTMLInputElement> & InputHTMLAttributes<HTMLInputElement> & { children?: ReactNode; }'.", 'tags': [], 'severity': 1, 'code': 2322, 'source': 'typescript'}, {'range': {'start': {'line': 184, 'character': 4}, 'end': {'line': 184, 'character': 11}}, 'message': "'focused' is declared but its value is never read.", 'tags': [1], 'severity': 4, 'code': 6133, 'source': 'typescript'}, {'range': {'start': {'line': 187, 'character': 4}, 'end': {'line': 187, 'character': 22}}, 'message': "'formControlContext' is declared but its value is never read.", 'tags': [1], 'severity': 4, 'code': 6133, 'source': 'typescript'}, {'range': {'start': {'line': 351, 'character': 6}, 'end': {'line': 351, 'character': 7}}, 'message': "'a' is declared but its value is never read.", 'tags': [1], 'severity': 4, 'code': 6133, 'source': 'typescript'}], 'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}
:: <-  LSP-typescript textDocument/publishDiagnostics: {'diagnostics': [{'range': {'start': {'line': 352, 'character': 2}, 'end': {'line': 352, 'character': 2}}, 'message': 'Identifier expected.', 'tags': [], 'severity': 1, 'code': 1003, 'source': 'typescript'}, {'range': {'start': {'line': 179, 'character': 2}, 'end': {'line': 179, 'character': 5}}, 'message': "Parameter 'ref' implicitly has an 'any' type.", 'tags': [], 'severity': 1, 'code': 7006, 'source': 'typescript'}, {'range': {'start': {'line': 199, 'character': 4}, 'end': {'line': 199, 'character': 22}}, 'message': "Object is possibly 'null'.", 'tags': [], 'severity': 1, 'code': 2531, 'source': 'typescript'}, {'range': {'start': {'line': 210, 'character': 28}, 'end': {'line': 210, 'character': 33}}, 'message': "Property 'focus' does not exist on type 'never'.", 'tags': [], 'severity': 1, 'code': 2339, 'source': 'typescript'}, {'range': {'start': {'line': 228, 'character': 24}, 'end': {'line': 228, 'character': 29}}, 'message': "Property 'focus' does not exist on type 'never'.", 'tags': [], 'severity': 1, 'code': 2339, 'source': 'typescript'}, {'range': {'start': {'line': 234, 'character': 26}, 'end': {'line': 234, 'character': 31}}, 'message': "Parameter 'child' implicitly has an 'any' type.", 'tags': [], 'severity': 1, 'code': 7006, 'source': 'typescript'}, {'range': {'start': {'line': 251, 'character': 11}, 'end': {'line': 251, 'character': 16}}, 'message': "'React' refers to a UMD global, but the current file is a module. Consider adding an import instead.", 'tags': [], 'severity': 1, 'code': 2686, 'source': 'typescript'}, {'range': {'start': {'line': 315, 'character': 14}, 'end': {'line': 315, 'character': 19}}, 'message': "Type 'unknown' is not assignable to type 'string | number | readonly string[] | undefined'.\n  Type 'unknown' is not assignable to type 'readonly string[]'.", 'relatedInformation': [{'location': {'range': {'start': {'line': 2231, 'character': 8}, 'end': {'line': 2231, 'character': 13}}, 'uri': 'file:///Users/jansedlon/Work/Designers-Trust/node_modules/%40types/react/index.d.ts'}, 'message': "The expected type comes from property 'value' which is declared here on type 'DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>'"}], 'severity': 1, 'code': 2322, 'source': 'typescript', 'tags': []}, {'range': {'start': {'line': 329, 'character': 12}, 'end': {'line': 329, 'character': 17}}, 'message': "Type '{ placeholder: string | undefined; disabled: boolean; error: boolean; 'aria-invalid': true | undefined; defaultValue: string | number | readonly string[] | undefined; ref: Ref<any>; value: string | number | readonly string[] | undefined; required: boolean; }' is not assignable to type 'IntrinsicAttributes & MUIStyledCommonProps<Theme> & { select?: boolean | undefined; } & ClassAttributes<HTMLInputElement> & InputHTMLAttributes<HTMLInputElement> & { children?: ReactNode; }'.\n  Property 'error' does not exist on type 'IntrinsicAttributes & MUIStyledCommonProps<Theme> & { select?: boolean | undefined; } & ClassAttributes<HTMLInputElement> & InputHTMLAttributes<HTMLInputElement> & { children?: ReactNode; }'.", 'tags': [], 'severity': 1, 'code': 2322, 'source': 'typescript'}, {'range': {'start': {'line': 184, 'character': 4}, 'end': {'line': 184, 'character': 11}}, 'message': "'focused' is declared but its value is never read.", 'tags': [1], 'severity': 4, 'code': 6133, 'source': 'typescript'}, {'range': {'start': {'line': 187, 'character': 4}, 'end': {'line': 187, 'character': 22}}, 'message': "'formControlContext' is declared but its value is never read.", 'tags': [1], 'severity': 4, 'code': 6133, 'source': 'typescript'}], 'uri': 'file:///Users/jansedlon/Work/Designers-Trust/packages/client-remix/app/ui/text-field/new-new-text-field.tsx'}
rchl commented 2 years ago

I'd like to compare the tsserver logs. You've provided tsserver log from VSCode and LSP log from ST. That's like comparing apples to oranges. :)

See https://github.com/sublimelsp/LSP-typescript/issues/129#issuecomment-1029462686 on how to enable same logs in ST.

rchl commented 2 years ago

And also, disable LSP-eslint and LSP-tailwindcss when testing to eliminate the possibility that those are the actual issue.

rchl commented 2 years ago

That said, your log shows that ST triggered a completion request on a and that returned a very big response and then again on . that returned a small response.

Your VSCode log shows only the second one. Not sure if you just haven't included it or VSCode for some reason didn't trigger completions on a...

BTW: I said "complete logs". :) It would help cut on time needed to investigate it, which I don't have that much of.

jansedlon commented 2 years ago

That's like comparing apples to oranges. :)

Ah, sorry! If full logs, then okay. I'll restart the ts server and then do the exact same thing

rwols commented 2 years ago

Your VSCode log shows only the second one. Not sure if you just haven't included it or VSCode for some reason didn't trigger completions on a...

Then resolving this on the ST side could improve performance https://github.com/sublimehq/sublime_text/issues/3796

jansedlon commented 2 years ago

Here are both logs. I performed exactly the same operations. Before that I restarted TSServer. Logs are too large so I uploaded them to Dropbox. Logs

rchl commented 2 years ago

Thanks. My observations:

jansedlon commented 2 years ago

Thanks for your observations, I'll try to turn off inlay hints. Also, any chance that the mentioned issue will be resolved?

michaelknoch commented 2 years ago

did it help @jansedlon ? How can I disable inlay hints actually?

rchl commented 2 years ago

Options with inlayHints in default settings. Those are not enabled by default.

nickhstr commented 1 year ago

I narrowed down my LSP-TypeScript slowness issues to the autocomplete, namely that there were a ton of suggestions populating the results in one of my large monorepo projects. Adding this to my LSP-typescript.sublime-settings has helped tremendously:

{
    "initializationOptions": {
        "preferences": {
            "includeCompletionsForModuleExports": false
        }
    }
}
eboody commented 1 year ago

I narrowed down my LSP-TypeScript slowness issues to the autocomplete, namely that there were a ton of suggestions populating the results in one of my large monorepo projects. Adding this to my LSP-typescript.sublime-settings has helped tremendously:

{
  "initializationOptions": {
      "preferences": {
          "includeCompletionsForModuleExports": false
      }
  }
}

Nice! Do you know how to replicate this on neovim?

ishanray commented 1 year ago

Any updates regarding this or https://github.com/sublimehq/sublime_text/issues/3796?

Sublime is generally the slowest LSP out there even on smaller projects with the Volar LSP for Vue.

predragnikolic commented 1 year ago

LSP implemented a way to cancel completions requests https://github.com/sublimelsp/LSP/pull/2177

Sublime is generally the slowest LSP out there even on smaller projects with the Volar LSP for Vue.

The speed of LSP is affected by the server. If a server returns results slow, there is nothing a client can do about it.

Both the typescript language server and volar language server use tsserver underneath.

rchl commented 1 year ago

The biggest contributor to this issue is ST freezing main thread due to large number of completions. At least VSCode doesn't have problems with same number of completions. I think that that issue is not even filed in ST bug tracker though.

ipmanlk commented 1 year ago

The biggest contributor to this issue is ST freezing main thread due to large number of completions. At least VSCode doesn't have problems with same number of completions. I think that that issue is not even filed in ST bug tracker though.

Yes. Rather than slow completions this issue has to do with ST UI freezing for a good couple of seconds depending on the system. Because there are no ETAs with ST development I eventually ended up switching back to VSC again temporarily.