Skip to content

Commit

Permalink
feat(language-service): support auto imports and project references (#24
Browse files Browse the repository at this point in the history
)

Co-authored-by: johnsoncodehk <johnsoncodehk@gmail.com>
  • Loading branch information
blake-newman and johnsoncodehk committed Apr 2, 2023
1 parent e975c5c commit a686ee9
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 30 deletions.
9 changes: 0 additions & 9 deletions packages/language-server/src/common/project.ts
Original file line number Diff line number Diff line change
Expand Up @@ -218,15 +218,6 @@ export async function createProject(context: ProjectContext) {
},
};

if (context.workspace.workspaces.initOptions.noProjectReferences) {
host.getProjectReferences = undefined;
host.getCompilationSettings = () => ({
...parsedCommandLine.options,
rootDir: undefined,
composite: false,
});
}

if (context.workspace.workspaces.tsLocalized) {
host.getLocalizedDiagnosticMessages = () => context.workspace.workspaces.tsLocalized;
}
Expand Down
1 change: 0 additions & 1 deletion packages/language-server/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,6 @@ export interface LanguageServerInitializationOptions {
* https://github.com/Microsoft/TypeScript/wiki/Standalone-Server-%28tsserver%29#cancellation
*/
cancellationPipeName?: string;
noProjectReferences?: boolean;
reverseConfigFilePriority?: boolean;
disableFileWatcher?: boolean;
maxFileSize?: number;
Expand Down
2 changes: 1 addition & 1 deletion packages/language-service/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"dependencies": {
"@volar/language-core": "1.4.0-alpha.6",
"@volar/source-map": "1.4.0-alpha.6",
"typescript-auto-import-cache": "^0.0.1",
"typescript-auto-import-cache": "^0.1.0",
"vscode-html-languageservice": "^5.0.4",
"vscode-json-languageservice": "^5.2.0",
"vscode-languageserver-protocol": "^3.17.3",
Expand Down
37 changes: 30 additions & 7 deletions packages/language-service/src/baseLanguageService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,28 +39,51 @@ import * as vscode from 'vscode-languageserver-protocol';
// fix build
import { notEmpty, syntaxToLanguageId } from './utils/common';

export type LanguageService = ReturnType<typeof createLanguageService>;
export type LanguageService = ReturnType<typeof createLanguageServiceBase>;

export function createLanguageService(
ctx: LanguageServiceOptions,
documentRegistry?: ts.DocumentRegistry,
) {
const languageContext = createLanguageContext(ctx.host, Object.values(ctx.config.languages ?? {}).filter(notEmpty));
const context = createLanguageServiceContext(ctx, languageContext, documentRegistry);
const context = createLanguageServicePluginContext(ctx, languageContext, documentRegistry);
return createLanguageServiceBase(context);
}

function createLanguageServiceContext(
function createLanguageServicePluginContext(
ctx: LanguageServiceOptions,
languageContext: ReturnType<typeof createLanguageContext>,
documentRegistry?: ts.DocumentRegistry,
) {

const ts = ctx.host.getTypeScriptModule?.();
const tsLs = ts?.createLanguageService(languageContext.typescript.languageServiceHost, documentRegistry);
let tsLs: ts.LanguageService | undefined;

if (ts) {
const created = tsFaster.createLanguageService(
ts,
languageContext.typescript.languageServiceHost,
(proxiedHost) => {
languageContext.typescript.languageServiceHost = proxiedHost;
return ts.createLanguageService(proxiedHost, documentRegistry);
},
ctx.rootUri.path,
);
tsLs = created.languageService;

if (created.setPreferences && ctx.configurationHost) {

const configHost = ctx.configurationHost;

if (ts && tsLs) {
tsFaster.decorate(ts, languageContext.typescript.languageServiceHost, tsLs);
updatePreferences();
ctx.configurationHost?.onDidChangeConfiguration?.(updatePreferences);

async function updatePreferences() {
const preferences = await configHost.getConfiguration<ts.UserPreferences>('typescript.preferences');
if (preferences) {
created.setPreferences?.(preferences);
}
}
}
}

const textDocumentMapper = createDocumentsAndSourceMaps(ctx, languageContext.virtualFiles);
Expand Down
17 changes: 5 additions & 12 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit a686ee9

Please sign in to comment.