From 5faf2ffeb947a63eddd5fbbaeaf0696994d700bd Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 2 Apr 2018 11:24:46 -0700 Subject: [PATCH 1/3] Path completions --- src/services/completions.ts | 2 ++ tests/cases/fourslash/fourslash.ts | 8 -------- .../fourslash/importTypeModuleCompletions.ts | 19 +++++++++++++++++++ 3 files changed, 21 insertions(+), 8 deletions(-) create mode 100644 tests/cases/fourslash/importTypeModuleCompletions.ts diff --git a/src/services/completions.ts b/src/services/completions.ts index 1fcd947e5bb79..5ebc2d4f9109c 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -376,6 +376,8 @@ namespace ts.Completions { // } // let x: Foo["/*completion position*/"] return stringLiteralCompletionsFromProperties(typeChecker.getTypeFromTypeNode((node.parent.parent as IndexedAccessTypeNode).objectType)); + case SyntaxKind.ImportTypeNode: + return { kind: StringLiteralCompletionKind.Paths, paths: PathCompletions.getStringLiteralCompletionsFromModuleNames(sourceFile, node, compilerOptions, host, typeChecker) };; default: return undefined; } diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts index 55f2afe747e05..6e813acaf57c6 100644 --- a/tests/cases/fourslash/fourslash.ts +++ b/tests/cases/fourslash/fourslash.ts @@ -201,14 +201,6 @@ declare namespace FourSlashInterface { assertHasRanges(ranges: Range[]): void; caretAtMarker(markerName?: string): void; completionsAt(markerName: string | ReadonlyArray, completions: ReadonlyArray, options?: CompletionsAtOptions): void; - completionsAndDetailsAt( - markerName: string, - completions: { - excludes?: ReadonlyArray, - //TODO: better type - entries: ReadonlyArray<{ entry: any, details: any }>, - }, - ): void; //TODO: better type applyCodeActionFromCompletion(markerName: string, options: { name: string, source?: string, diff --git a/tests/cases/fourslash/importTypeModuleCompletions.ts b/tests/cases/fourslash/importTypeModuleCompletions.ts new file mode 100644 index 0000000000000..512dfafdb57ad --- /dev/null +++ b/tests/cases/fourslash/importTypeModuleCompletions.ts @@ -0,0 +1,19 @@ +/// + +// @Filename: /ns.ts +////export namespace Foo { +//// export namespace Bar { +//// export class Baz {} +//// } +////} +// @Filename: /node_modules/package/index.ts +////export namespace Foo { +//// export namespace Bar { +//// export class Baz {} +//// } +////} +// @Filename: /usage.ts +////type A = typeof import("p/*1*/"); +////type B = typeof import(".//*2*/"); +verify.completionsAt("1", ["package"], { isNewIdentifierLocation: true }); +verify.completionsAt("2", ["lib", "ns", "node_modules"], { isNewIdentifierLocation: true }); From 2932a0e9bdbab5b6de1741b9050ce4f868b864ac Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 2 Apr 2018 13:25:02 -0700 Subject: [PATCH 2/3] Add missing flag to test --- tests/cases/fourslash/importTypeModuleCompletions.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/cases/fourslash/importTypeModuleCompletions.ts b/tests/cases/fourslash/importTypeModuleCompletions.ts index 512dfafdb57ad..ab852c0cedcb6 100644 --- a/tests/cases/fourslash/importTypeModuleCompletions.ts +++ b/tests/cases/fourslash/importTypeModuleCompletions.ts @@ -1,5 +1,7 @@ /// +// @moduleResolution: node + // @Filename: /ns.ts ////export namespace Foo { //// export namespace Bar { From 2fe7e7746d7d2cc4dd09e979530262ffd47c0983 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 2 Apr 2018 15:59:23 -0700 Subject: [PATCH 3/3] Minify test, fix lint --- src/services/completions.ts | 2 +- tests/cases/fourslash/importTypeModuleCompletions.ts | 12 ++---------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/services/completions.ts b/src/services/completions.ts index 5ebc2d4f9109c..0c42ee8f8cbbd 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -377,7 +377,7 @@ namespace ts.Completions { // let x: Foo["/*completion position*/"] return stringLiteralCompletionsFromProperties(typeChecker.getTypeFromTypeNode((node.parent.parent as IndexedAccessTypeNode).objectType)); case SyntaxKind.ImportTypeNode: - return { kind: StringLiteralCompletionKind.Paths, paths: PathCompletions.getStringLiteralCompletionsFromModuleNames(sourceFile, node, compilerOptions, host, typeChecker) };; + return { kind: StringLiteralCompletionKind.Paths, paths: PathCompletions.getStringLiteralCompletionsFromModuleNames(sourceFile, node, compilerOptions, host, typeChecker) }; default: return undefined; } diff --git a/tests/cases/fourslash/importTypeModuleCompletions.ts b/tests/cases/fourslash/importTypeModuleCompletions.ts index ab852c0cedcb6..2a2f17818d4fd 100644 --- a/tests/cases/fourslash/importTypeModuleCompletions.ts +++ b/tests/cases/fourslash/importTypeModuleCompletions.ts @@ -3,17 +3,9 @@ // @moduleResolution: node // @Filename: /ns.ts -////export namespace Foo { -//// export namespace Bar { -//// export class Baz {} -//// } -////} +////file content not read // @Filename: /node_modules/package/index.ts -////export namespace Foo { -//// export namespace Bar { -//// export class Baz {} -//// } -////} +////file content not read // @Filename: /usage.ts ////type A = typeof import("p/*1*/"); ////type B = typeof import(".//*2*/");