Merge pull request #36063 from uniqueiniquity/addWeakCompletionProperty

Add completion property to identify completions from unchecked files
This commit is contained in:
Ben Lichtman 2020-01-28 13:53:47 -08:00 committed by GitHub
commit e87b2e3506
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 54 additions and 4 deletions

View File

@ -843,8 +843,8 @@ namespace FourSlash {
}
private verifyCompletionEntry(actual: ts.CompletionEntry, expected: FourSlashInterface.ExpectedCompletionEntry) {
const { insertText, replacementSpan, hasAction, isRecommended, kind, kindModifiers, text, documentation, tags, source, sourceDisplay, sortText } = typeof expected === "string"
? { insertText: undefined, replacementSpan: undefined, hasAction: undefined, isRecommended: undefined, kind: undefined, kindModifiers: undefined, text: undefined, documentation: undefined, tags: undefined, source: undefined, sourceDisplay: undefined, sortText: undefined }
const { insertText, replacementSpan, hasAction, isRecommended, isFromUncheckedFile, kind, kindModifiers, text, documentation, tags, source, sourceDisplay, sortText } = typeof expected === "string"
? { insertText: undefined, replacementSpan: undefined, hasAction: undefined, isRecommended: undefined, isFromUncheckedFile: undefined, kind: undefined, kindModifiers: undefined, text: undefined, documentation: undefined, tags: undefined, source: undefined, sourceDisplay: undefined, sortText: undefined }
: expected;
if (actual.insertText !== insertText) {
@ -867,8 +867,14 @@ namespace FourSlash {
}
}
if (isFromUncheckedFile !== undefined) {
if (actual.isFromUncheckedFile !== isFromUncheckedFile) {
this.raiseError(`Expected 'isFromUncheckedFile' value '${actual.isFromUncheckedFile}' to equal '${isFromUncheckedFile}'`);
}
}
assert.equal(actual.hasAction, hasAction, `Expected 'hasAction' value '${actual.hasAction}' to equal '${hasAction}'`);
assert.equal(actual.isRecommended, isRecommended, `Expected 'isRecommended' value '${actual.source}' to equal '${isRecommended}'`);
assert.equal(actual.isRecommended, isRecommended, `Expected 'isRecommended' value '${actual.isRecommended}' to equal '${isRecommended}'`);
assert.equal(actual.source, source, `Expected 'source' value '${actual.source}' to equal '${source}'`);
assert.equal(actual.sortText, sortText || ts.Completions.SortText.LocationPriority, this.messageAtLastKnownMarker(`Actual entry: ${JSON.stringify(actual)}`));

View File

@ -1480,6 +1480,7 @@ namespace FourSlashInterface {
readonly replacementSpan?: FourSlash.Range;
readonly hasAction?: boolean; // If not specified, will assert that this is false.
readonly isRecommended?: boolean; // If not specified, will assert that this is false.
readonly isFromUncheckedFile?: boolean; // If not specified, won't assert about this
readonly kind?: string; // If not specified, won't assert about this
readonly kindModifiers?: string; // Must be paired with 'kind'
readonly text?: string;

View File

@ -2121,6 +2121,11 @@ namespace ts.server.protocol {
* Then either that enum/class or a namespace containing it will be the recommended symbol.
*/
isRecommended?: true;
/**
* If true, this completion was generated from traversing the name table of an unchecked JS file,
* and therefore may not be accurate.
*/
isFromUncheckedFile?: true;
}
/**

View File

@ -310,7 +310,8 @@ namespace ts.Completions {
name: realName,
kind: ScriptElementKind.warning,
kindModifiers: "",
sortText: SortText.JavascriptIdentifiers
sortText: SortText.JavascriptIdentifiers,
isFromUncheckedFile: true
});
}
});

View File

@ -988,6 +988,7 @@ namespace ts {
hasAction?: true;
source?: string;
isRecommended?: true;
isFromUncheckedFile?: true;
}
export interface CompletionEntryDetails {

View File

@ -5666,6 +5666,7 @@ declare namespace ts {
hasAction?: true;
source?: string;
isRecommended?: true;
isFromUncheckedFile?: true;
}
interface CompletionEntryDetails {
name: string;
@ -7673,6 +7674,11 @@ declare namespace ts.server.protocol {
* Then either that enum/class or a namespace containing it will be the recommended symbol.
*/
isRecommended?: true;
/**
* If true, this completion was generated from traversing the name table of an unchecked JS file,
* and therefore may not be accurate.
*/
isFromUncheckedFile?: true;
}
/**
* Additional completion entry details, available on demand

View File

@ -5666,6 +5666,7 @@ declare namespace ts {
hasAction?: true;
source?: string;
isRecommended?: true;
isFromUncheckedFile?: true;
}
interface CompletionEntryDetails {
name: string;

View File

@ -0,0 +1,28 @@
/// <reference path="fourslash.ts" />
// @allowJs: true
// @checkJs: false
// @Filename: index.js
////function hello() {
////
////}
////
////const goodbye = 5;
////
////console./*0*/
verify.completions({
marker: "0",
includes: [
{
name: "hello",
sortText: completion.SortText.JavascriptIdentifiers,
isFromUncheckedFile: true
},
{
name: "goodbye",
sortText: completion.SortText.JavascriptIdentifiers,
isFromUncheckedFile: true
}
]
});

View File

@ -611,6 +611,7 @@ declare namespace FourSlashInterface {
readonly replacementSpan?: Range;
readonly hasAction?: boolean;
readonly isRecommended?: boolean;
readonly isFromUncheckedFile?: boolean;
readonly kind?: string;
readonly kindModifiers?: string;
readonly sortText?: completion.SortText;