mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-17 21:06:50 -05:00
Added skipDestructiveCodeActions argument to organize imports server command (#43184)
* Stopped removing unused imports in files with syntactic errors * Added allowDestructiveCodeActions arg * Updated .d.ts baselines * Stop factoring syntax errors. Weird that no tests break... * Have args extend scope so it is not a breaking change * Update src/harness/harnessLanguageService.ts Co-authored-by: Jesse Trinity <jetrinit@microsoft.com> * Fixed API breaking change, and renamed to skip * Always with the baselines * One more .d.ts baseline to fix * Remove blank line in src/harness/harnessLanguageService.ts Co-authored-by: Jesse Trinity <jetrinit@microsoft.com>
This commit is contained in:
@@ -13,12 +13,13 @@ namespace ts.OrganizeImports {
|
||||
host: LanguageServiceHost,
|
||||
program: Program,
|
||||
preferences: UserPreferences,
|
||||
skipDestructiveCodeActions?: boolean
|
||||
) {
|
||||
|
||||
const changeTracker = textChanges.ChangeTracker.fromContext({ host, formatContext, preferences });
|
||||
|
||||
const coalesceAndOrganizeImports = (importGroup: readonly ImportDeclaration[]) => stableSort(
|
||||
coalesceImports(removeUnusedImports(importGroup, sourceFile, program)),
|
||||
coalesceImports(removeUnusedImports(importGroup, sourceFile, program, skipDestructiveCodeActions)),
|
||||
(s1, s2) => compareImportsOrRequireStatements(s1, s2));
|
||||
|
||||
// All of the old ImportDeclarations in the file, in syntactic order.
|
||||
@@ -87,7 +88,12 @@ namespace ts.OrganizeImports {
|
||||
}
|
||||
}
|
||||
|
||||
function removeUnusedImports(oldImports: readonly ImportDeclaration[], sourceFile: SourceFile, program: Program) {
|
||||
function removeUnusedImports(oldImports: readonly ImportDeclaration[], sourceFile: SourceFile, program: Program, skipDestructiveCodeActions: boolean | undefined) {
|
||||
// As a precaution, consider unused import detection to be destructive (GH #43051)
|
||||
if (skipDestructiveCodeActions) {
|
||||
return oldImports;
|
||||
}
|
||||
|
||||
const typeChecker = program.getTypeChecker();
|
||||
const jsxNamespace = typeChecker.getJsxNamespace(sourceFile);
|
||||
const jsxFragmentFactory = typeChecker.getJsxFragmentFactory(sourceFile);
|
||||
|
||||
@@ -2017,13 +2017,13 @@ namespace ts {
|
||||
return codefix.getAllFixes({ fixId, sourceFile, program, host, cancellationToken, formatContext, preferences });
|
||||
}
|
||||
|
||||
function organizeImports(scope: OrganizeImportsScope, formatOptions: FormatCodeSettings, preferences: UserPreferences = emptyOptions): readonly FileTextChanges[] {
|
||||
function organizeImports(args: OrganizeImportsArgs, formatOptions: FormatCodeSettings, preferences: UserPreferences = emptyOptions): readonly FileTextChanges[] {
|
||||
synchronizeHostData();
|
||||
Debug.assert(scope.type === "file");
|
||||
const sourceFile = getValidSourceFile(scope.fileName);
|
||||
Debug.assert(args.type === "file");
|
||||
const sourceFile = getValidSourceFile(args.fileName);
|
||||
const formatContext = formatting.getFormatContext(formatOptions, host);
|
||||
|
||||
return OrganizeImports.organizeImports(sourceFile, formatContext, host, program, preferences);
|
||||
return OrganizeImports.organizeImports(sourceFile, formatContext, host, program, preferences, args.skipDestructiveCodeActions);
|
||||
}
|
||||
|
||||
function getEditsForFileRename(oldFilePath: string, newFilePath: string, formatOptions: FormatCodeSettings, preferences: UserPreferences = emptyOptions): readonly FileTextChanges[] {
|
||||
|
||||
@@ -528,7 +528,7 @@ namespace ts {
|
||||
|
||||
getApplicableRefactors(fileName: string, positionOrRange: number | TextRange, preferences: UserPreferences | undefined, triggerReason?: RefactorTriggerReason, kind?: string): ApplicableRefactorInfo[];
|
||||
getEditsForRefactor(fileName: string, formatOptions: FormatCodeSettings, positionOrRange: number | TextRange, refactorName: string, actionName: string, preferences: UserPreferences | undefined): RefactorEditInfo | undefined;
|
||||
organizeImports(scope: OrganizeImportsScope, formatOptions: FormatCodeSettings, preferences: UserPreferences | undefined): readonly FileTextChanges[];
|
||||
organizeImports(args: OrganizeImportsArgs, formatOptions: FormatCodeSettings, preferences: UserPreferences | undefined): readonly FileTextChanges[];
|
||||
getEditsForFileRename(oldFilePath: string, newFilePath: string, formatOptions: FormatCodeSettings, preferences: UserPreferences | undefined): readonly FileTextChanges[];
|
||||
|
||||
getEmitOutput(fileName: string, emitOnlyDtsFiles?: boolean, forceDtsEmit?: boolean): EmitOutput;
|
||||
@@ -552,7 +552,9 @@ namespace ts {
|
||||
|
||||
export interface CombinedCodeFixScope { type: "file"; fileName: string; }
|
||||
|
||||
export type OrganizeImportsScope = CombinedCodeFixScope;
|
||||
export interface OrganizeImportsArgs extends CombinedCodeFixScope {
|
||||
skipDestructiveCodeActions?: boolean;
|
||||
}
|
||||
|
||||
export type CompletionsTriggerCharacter = "." | '"' | "'" | "`" | "/" | "@" | "<" | "#" | " ";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user