mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-18 17:27:54 -05:00
Issue an error on cross-file merges we cant emit (#38148)
This commit is contained in:
@@ -6029,14 +6029,19 @@ namespace ts {
|
||||
serializeAsNamespaceDeclaration(realMembers, localName, modifierFlags, !!(symbol.flags & (SymbolFlags.Function | SymbolFlags.Assignment)));
|
||||
}
|
||||
if (length(mergedMembers)) {
|
||||
const containingFile = getSourceFileOfNode(context.enclosingDeclaration);
|
||||
const localName = getInternalSymbolName(symbol, symbolName);
|
||||
const nsBody = createModuleBlock([createExportDeclaration(
|
||||
/*decorators*/ undefined,
|
||||
/*modifiers*/ undefined,
|
||||
createNamedExports(map(filter(mergedMembers, n => n.escapedName !== InternalSymbolName.ExportEquals), s => {
|
||||
createNamedExports(mapDefined(filter(mergedMembers, n => n.escapedName !== InternalSymbolName.ExportEquals), s => {
|
||||
const name = unescapeLeadingUnderscores(s.escapedName);
|
||||
const localName = getInternalSymbolName(s, name);
|
||||
const aliasDecl = s.declarations && getDeclarationOfAliasSymbol(s);
|
||||
if (containingFile && (aliasDecl ? containingFile !== getSourceFileOfNode(aliasDecl) : !some(s.declarations, d => getSourceFileOfNode(d) === containingFile))) {
|
||||
context.tracker?.reportNonlocalAugmentation?.(containingFile, symbol, s);
|
||||
return undefined;
|
||||
}
|
||||
const target = aliasDecl && getTargetOfAliasDeclaration(aliasDecl, /*dontRecursivelyResolve*/ true);
|
||||
includePrivateSymbol(target || s);
|
||||
const targetName = target ? getInternalSymbolName(target, unescapeLeadingUnderscores(target.escapedName)) : localName;
|
||||
|
||||
@@ -4388,6 +4388,14 @@
|
||||
"category": "Error",
|
||||
"code": 6231
|
||||
},
|
||||
"Declaration augments declaration in another file. This cannot be serialized.": {
|
||||
"category": "Error",
|
||||
"code": 6232
|
||||
},
|
||||
"This is the declaration being augmented. Consider moving the augmenting declaration into the same file.": {
|
||||
"category": "Error",
|
||||
"code": 6233
|
||||
},
|
||||
|
||||
"Projects to reference": {
|
||||
"category": "Message",
|
||||
|
||||
@@ -76,7 +76,8 @@ namespace ts {
|
||||
reportLikelyUnsafeImportRequiredError,
|
||||
moduleResolverHost: host,
|
||||
trackReferencedAmbientModule,
|
||||
trackExternalModuleSymbolOfImportTypeNode
|
||||
trackExternalModuleSymbolOfImportTypeNode,
|
||||
reportNonlocalAugmentation
|
||||
};
|
||||
let errorNameNode: DeclarationName | undefined;
|
||||
|
||||
@@ -190,6 +191,17 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
function reportNonlocalAugmentation(containingFile: SourceFile, parentSymbol: Symbol, symbol: Symbol) {
|
||||
const primaryDeclaration = find(parentSymbol.declarations, d => getSourceFileOfNode(d) === containingFile)!;
|
||||
const augmentingDeclarations = filter(symbol.declarations, d => getSourceFileOfNode(d) !== containingFile);
|
||||
for (const augmentations of augmentingDeclarations) {
|
||||
context.addDiagnostic(addRelatedInfo(
|
||||
createDiagnosticForNode(augmentations, Diagnostics.Declaration_augments_declaration_in_another_file_This_cannot_be_serialized),
|
||||
createDiagnosticForNode(primaryDeclaration, Diagnostics.This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_file)
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
function transformDeclarationsForJS(sourceFile: SourceFile, bundled?: boolean) {
|
||||
const oldDiag = getSymbolAccessibilityDiagnostic;
|
||||
getSymbolAccessibilityDiagnostic = (s) => ({
|
||||
|
||||
@@ -6468,6 +6468,7 @@ namespace ts {
|
||||
moduleResolverHost?: ModuleSpecifierResolutionHost & { getCommonSourceDirectory(): string };
|
||||
trackReferencedAmbientModule?(decl: ModuleDeclaration, symbol: Symbol): void;
|
||||
trackExternalModuleSymbolOfImportTypeNode?(symbol: Symbol): void;
|
||||
reportNonlocalAugmentation?(containingFile: SourceFile, parentSymbol: Symbol, augmentingSymbol: Symbol): void;
|
||||
}
|
||||
|
||||
export interface TextSpan {
|
||||
|
||||
Reference in New Issue
Block a user