UNPKG

typescript-language-server

Version:

Language Server Protocol (LSP) implementation for TypeScript using tsserver

101 lines 3.69 kB
/* * Copyright (C) 2017, 2018 TypeFox and others. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 */ import * as chai from 'chai'; import { TspClient } from './tsp-client.js'; import { ConsoleLogger } from './logger.js'; import { filePath, readContents, TestLspClient, uri } from './test-utils.js'; import { TypeScriptVersionProvider } from './tsServer/versionProvider.js'; const assert = chai.assert; const typescriptVersionProvider = new TypeScriptVersionProvider(); const bundled = typescriptVersionProvider.bundledVersion(); const logger = new ConsoleLogger(); const lspClientOptions = { rootUri: uri(), publishDiagnostics: () => { }, }; const lspClient = new TestLspClient(lspClientOptions, logger); let server; before(() => { server = new TspClient({ logger, lspClient, typescriptVersion: bundled, }); }); after(() => { server.shutdown(); }); describe('ts server client', () => { before(() => { server.start(); }); it('completion', async () => { const f = filePath('module2.ts'); server.notify("open" /* CommandTypes.Open */, { file: f, fileContent: readContents(f), }); const completions = await server.request("completionInfo" /* CommandTypes.CompletionInfo */, { file: f, line: 1, offset: 0, prefix: 'im', }); assert.isDefined(completions.body); assert.equal(completions.body.entries[1].name, 'ImageBitmap'); }); it('references', async () => { const f = filePath('module2.ts'); server.notify("open" /* CommandTypes.Open */, { file: f, fileContent: readContents(f), }); const references = await server.request("references" /* CommandTypes.References */, { file: f, line: 8, offset: 16, }); assert.isDefined(references.body); assert.equal(references.body.symbolName, 'doStuff'); }); it('inlayHints', async () => { const f = filePath('module2.ts'); server.notify("open" /* CommandTypes.Open */, { file: f, fileContent: readContents(f), }); await server.request("configure" /* CommandTypes.Configure */, { preferences: { includeInlayFunctionLikeReturnTypeHints: true, }, }); const inlayHints = await server.request("provideInlayHints" /* CommandTypes.ProvideInlayHints */, { file: f, start: 0, length: 1000, }); assert.isDefined(inlayHints.body); assert.equal(inlayHints.body[0].text, ': boolean'); }); it('documentHighlight', async () => { const f = filePath('module2.ts'); server.notify("open" /* CommandTypes.Open */, { file: f, fileContent: readContents(f), }); const response = await server.request("documentHighlights" /* CommandTypes.DocumentHighlights */, { file: f, line: 8, offset: 16, filesToSearch: [f], }); assert.isDefined(response.body); assert.isTrue(response.body.some(({ file }) => file.endsWith('module2.ts')), JSON.stringify(response.body, undefined, 2)); assert.isFalse(response.body.some(({ file: file_1 }) => file_1.endsWith('module1.ts')), JSON.stringify(response.body, undefined, 2)); }); }); //# sourceMappingURL=tsp-client.spec.js.map