Skip to content

Commit aaadb17

Browse files
authored
Merge pull request #34495 from microsoft/forceDts
Add forceDtsEmit flag to getEmitOutput
2 parents f24db4c + 850d16e commit aaadb17

File tree

6 files changed

+48
-10
lines changed

6 files changed

+48
-10
lines changed

src/compiler/emitter.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,9 @@ namespace ts {
393393
declarationFilePath: string | undefined,
394394
declarationMapPath: string | undefined,
395395
relativeToBuildInfo: (path: string) => string) {
396-
if (!sourceFileOrBundle || !declarationFilePath) {
396+
if (!sourceFileOrBundle) return;
397+
if (!declarationFilePath) {
398+
if (emitOnlyDtsFiles || compilerOptions.emitDeclarationOnly) emitSkipped = true;
397399
return;
398400
}
399401
const sourceFiles = isSourceFile(sourceFileOrBundle) ? [sourceFileOrBundle] : sourceFileOrBundle.sourceFiles;

src/services/services.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1638,12 +1638,12 @@ namespace ts {
16381638
return NavigateTo.getNavigateToItems(sourceFiles, program.getTypeChecker(), cancellationToken, searchValue, maxResultCount, excludeDtsFiles);
16391639
}
16401640

1641-
function getEmitOutput(fileName: string, emitOnlyDtsFiles = false) {
1641+
function getEmitOutput(fileName: string, emitOnlyDtsFiles?: boolean, forceDtsEmit?: boolean) {
16421642
synchronizeHostData();
16431643

16441644
const sourceFile = getValidSourceFile(fileName);
16451645
const customTransformers = host.getCustomTransformers && host.getCustomTransformers();
1646-
return getFileEmitOutput(program, sourceFile, emitOnlyDtsFiles, cancellationToken, customTransformers);
1646+
return getFileEmitOutput(program, sourceFile, !!emitOnlyDtsFiles, cancellationToken, customTransformers, forceDtsEmit);
16471647
}
16481648

16491649
// Signature help

src/services/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ namespace ts {
391391
organizeImports(scope: OrganizeImportsScope, formatOptions: FormatCodeSettings, preferences: UserPreferences | undefined): readonly FileTextChanges[];
392392
getEditsForFileRename(oldFilePath: string, newFilePath: string, formatOptions: FormatCodeSettings, preferences: UserPreferences | undefined): readonly FileTextChanges[];
393393

394-
getEmitOutput(fileName: string, emitOnlyDtsFiles?: boolean): EmitOutput;
394+
getEmitOutput(fileName: string, emitOnlyDtsFiles?: boolean, forceDtsEmit?: boolean): EmitOutput;
395395

396396
getProgram(): Program | undefined;
397397

src/testRunner/unittests/services/languageService.ts

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,9 @@ class Carousel<T> extends Vue {
1515
"vue-class-component.d.ts": `import Vue from "./vue";
1616
export function Component(x: Config): any;`
1717
};
18-
// Regression test for GH #18245 - bug in single line comment writer caused a debug assertion when attempting
19-
// to write an alias to a module's default export was referrenced across files and had no default export
20-
it("should be able to create a language service which can respond to deinition requests without throwing", () => {
21-
const languageService = createLanguageService({
18+
19+
function createLanguageService() {
20+
return ts.createLanguageService({
2221
getCompilationSettings() {
2322
return {};
2423
},
@@ -39,8 +38,45 @@ export function Component(x: Config): any;`
3938
return getDefaultLibFilePath(options);
4039
},
4140
});
41+
}
42+
// Regression test for GH #18245 - bug in single line comment writer caused a debug assertion when attempting
43+
// to write an alias to a module's default export was referrenced across files and had no default export
44+
it("should be able to create a language service which can respond to deinition requests without throwing", () => {
45+
const languageService = createLanguageService();
4246
const definitions = languageService.getDefinitionAtPosition("foo.ts", 160); // 160 is the latter `vueTemplateHtml` position
4347
expect(definitions).to.exist; // eslint-disable-line no-unused-expressions
4448
});
49+
50+
it("getEmitOutput on language service has way to force dts emit", () => {
51+
const languageService = createLanguageService();
52+
assert.deepEqual(
53+
languageService.getEmitOutput(
54+
"foo.ts",
55+
/*emitOnlyDtsFiles*/ true
56+
),
57+
{
58+
emitSkipped: true,
59+
outputFiles: emptyArray,
60+
exportedModulesFromDeclarationEmit: undefined
61+
}
62+
);
63+
64+
assert.deepEqual(
65+
languageService.getEmitOutput(
66+
"foo.ts",
67+
/*emitOnlyDtsFiles*/ true,
68+
/*forceDtsEmit*/ true
69+
),
70+
{
71+
emitSkipped: false,
72+
outputFiles: [{
73+
name: "foo.d.ts",
74+
text: "export {};\r\n",
75+
writeByteOrderMark: false
76+
}],
77+
exportedModulesFromDeclarationEmit: undefined
78+
}
79+
);
80+
});
4581
});
4682
}

tests/baselines/reference/api/tsserverlibrary.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5073,7 +5073,7 @@ declare namespace ts {
50735073
getEditsForRefactor(fileName: string, formatOptions: FormatCodeSettings, positionOrRange: number | TextRange, refactorName: string, actionName: string, preferences: UserPreferences | undefined): RefactorEditInfo | undefined;
50745074
organizeImports(scope: OrganizeImportsScope, formatOptions: FormatCodeSettings, preferences: UserPreferences | undefined): readonly FileTextChanges[];
50755075
getEditsForFileRename(oldFilePath: string, newFilePath: string, formatOptions: FormatCodeSettings, preferences: UserPreferences | undefined): readonly FileTextChanges[];
5076-
getEmitOutput(fileName: string, emitOnlyDtsFiles?: boolean): EmitOutput;
5076+
getEmitOutput(fileName: string, emitOnlyDtsFiles?: boolean, forceDtsEmit?: boolean): EmitOutput;
50775077
getProgram(): Program | undefined;
50785078
dispose(): void;
50795079
}

tests/baselines/reference/api/typescript.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5073,7 +5073,7 @@ declare namespace ts {
50735073
getEditsForRefactor(fileName: string, formatOptions: FormatCodeSettings, positionOrRange: number | TextRange, refactorName: string, actionName: string, preferences: UserPreferences | undefined): RefactorEditInfo | undefined;
50745074
organizeImports(scope: OrganizeImportsScope, formatOptions: FormatCodeSettings, preferences: UserPreferences | undefined): readonly FileTextChanges[];
50755075
getEditsForFileRename(oldFilePath: string, newFilePath: string, formatOptions: FormatCodeSettings, preferences: UserPreferences | undefined): readonly FileTextChanges[];
5076-
getEmitOutput(fileName: string, emitOnlyDtsFiles?: boolean): EmitOutput;
5076+
getEmitOutput(fileName: string, emitOnlyDtsFiles?: boolean, forceDtsEmit?: boolean): EmitOutput;
50775077
getProgram(): Program | undefined;
50785078
dispose(): void;
50795079
}

0 commit comments

Comments
 (0)