diff --git a/src/services/codefixes/fixAddMissingMember.ts b/src/services/codefixes/fixAddMissingMember.ts
index 65af98b64f5ec..9101dafc2874c 100644
--- a/src/services/codefixes/fixAddMissingMember.ts
+++ b/src/services/codefixes/fixAddMissingMember.ts
@@ -171,7 +171,7 @@ namespace ts.codefix {
if (isIdentifier(token) && isCallExpression(parent.parent)) {
const moduleDeclaration = find(symbol.declarations, isModuleDeclaration);
const moduleDeclarationSourceFile = moduleDeclaration?.getSourceFile();
- if (moduleDeclaration && moduleDeclarationSourceFile && !program.isSourceFileFromExternalLibrary(moduleDeclarationSourceFile)) {
+ if (moduleDeclaration && moduleDeclarationSourceFile && !isSourceFileFromLibrary(program, moduleDeclarationSourceFile)) {
return { kind: InfoKind.Function, token, call: parent.parent, sourceFile, modifierFlags: ModifierFlags.Export, parentDeclaration: moduleDeclaration };
}
@@ -180,7 +180,7 @@ namespace ts.codefix {
return;
}
- if (moduleSourceFile && !program.isSourceFileFromExternalLibrary(moduleSourceFile)) {
+ if (moduleSourceFile && !isSourceFileFromLibrary(program, moduleSourceFile)) {
return { kind: InfoKind.Function, token, call: parent.parent, sourceFile: moduleSourceFile, modifierFlags: ModifierFlags.Export, parentDeclaration: moduleSourceFile };
}
}
@@ -193,7 +193,7 @@ namespace ts.codefix {
// Prefer to change the class instead of the interface if they are merged
const classOrInterface = classDeclaration || find(symbol.declarations, isInterfaceDeclaration);
- if (classOrInterface && !program.isSourceFileFromExternalLibrary(classOrInterface.getSourceFile())) {
+ if (classOrInterface && !isSourceFileFromLibrary(program, classOrInterface.getSourceFile())) {
const makeStatic = ((leftExpressionType as TypeReference).target || leftExpressionType) !== checker.getDeclaredTypeOfSymbol(symbol);
if (makeStatic && (isPrivateIdentifier(token) || isInterfaceDeclaration(classOrInterface))) {
return undefined;
@@ -207,12 +207,16 @@ namespace ts.codefix {
}
const enumDeclaration = find(symbol.declarations, isEnumDeclaration);
- if (enumDeclaration && !isPrivateIdentifier(token) && !program.isSourceFileFromExternalLibrary(enumDeclaration.getSourceFile())) {
+ if (enumDeclaration && !isPrivateIdentifier(token) && !isSourceFileFromLibrary(program, enumDeclaration.getSourceFile())) {
return { kind: InfoKind.Enum, token, parentDeclaration: enumDeclaration };
}
return undefined;
}
+ function isSourceFileFromLibrary(program: Program, node: SourceFile) {
+ return program.isSourceFileFromExternalLibrary(node) || program.isSourceFileDefaultLibrary(node);
+ }
+
function getActionsForMissingMemberDeclaration(context: CodeFixContext, info: ClassOrInterfaceInfo): CodeFixAction[] | undefined {
return info.isJSFile ? singleElementArray(createActionForAddMissingMemberInJavascriptFile(context, info)) :
createActionsForAddMissingMemberInTypeScriptFile(context, info);
diff --git a/tests/cases/fourslash/codeFixAddMissingMember21.ts b/tests/cases/fourslash/codeFixAddMissingMember21.ts
new file mode 100644
index 0000000000000..74ed7eeac288f
--- /dev/null
+++ b/tests/cases/fourslash/codeFixAddMissingMember21.ts
@@ -0,0 +1,8 @@
+///
+
+////declare let p: Promise;
+////async function f() {
+//// p.toLowerCase();
+////}
+
+verify.not.codeFixAvailable("fixMissingMember");