From f6a993f394a8a0457cafb4d6a421f75493a2470a Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Mon, 8 Nov 2021 09:44:56 +0000 Subject: [PATCH 1/3] Add function names for code fixes. --- .../codefixes/addConvertToUnknownForNonOverlappingTypes.ts | 2 +- src/services/codefixes/addEmptyExportDeclaration.ts | 2 +- src/services/codefixes/addMissingAsync.ts | 2 +- src/services/codefixes/addMissingAwait.ts | 2 +- src/services/codefixes/addMissingConst.ts | 2 +- src/services/codefixes/addMissingDeclareProperty.ts | 2 +- src/services/codefixes/addMissingInvocationForDecorator.ts | 2 +- src/services/codefixes/addNameToNamelessParameter.ts | 2 +- src/services/codefixes/convertConstToLet.ts | 2 +- src/services/codefixes/convertLiteralTypeToMappedType.ts | 2 +- src/services/codefixes/convertToMappedObjectType.ts | 5 ++--- src/services/codefixes/convertToTypeOnlyExport.ts | 4 ++-- src/services/codefixes/convertToTypeOnlyImport.ts | 4 ++-- src/services/codefixes/disableJsDiagnostics.ts | 2 +- src/services/codefixes/fixAddModuleReferTypeMissingTypeof.ts | 2 +- src/services/codefixes/fixAwaitInSyncFunction.ts | 2 +- src/services/codefixes/fixCannotFindModule.ts | 2 +- .../fixClassDoesntImplementInheritedAbstractMember.ts | 4 ++-- src/services/codefixes/fixEnableExperimentalDecorators.ts | 2 +- src/services/codefixes/fixEnableJsxFlag.ts | 2 +- src/services/codefixes/fixIncorrectNamedTupleSyntax.ts | 2 +- src/services/codefixes/fixModuleAndTargetOptions.ts | 2 +- src/services/codefixes/fixOverrideModifier.ts | 2 +- src/services/codefixes/fixReturnTypeInAsyncFunction.ts | 2 +- src/services/codefixes/fixStrictClassInitialization.ts | 2 +- src/services/codefixes/removeUnnecessaryAwait.ts | 2 +- src/services/codefixes/returnValueCorrect.ts | 2 +- src/services/codefixes/splitTypeOnlyImport.ts | 2 +- src/services/codefixes/useBigintLiteral.ts | 2 +- src/services/codefixes/wrapJsxInFragment.ts | 2 +- 30 files changed, 34 insertions(+), 35 deletions(-) diff --git a/src/services/codefixes/addConvertToUnknownForNonOverlappingTypes.ts b/src/services/codefixes/addConvertToUnknownForNonOverlappingTypes.ts index 3351ef9e5a3a7..bc22823737822 100644 --- a/src/services/codefixes/addConvertToUnknownForNonOverlappingTypes.ts +++ b/src/services/codefixes/addConvertToUnknownForNonOverlappingTypes.ts @@ -4,7 +4,7 @@ namespace ts.codefix { const errorCodes = [Diagnostics.Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the_other_If_this_was_intentional_convert_the_expression_to_unknown_first.code]; registerCodeFix({ errorCodes, - getCodeActions: (context) => { + getCodeActions: function getCodeActionsToAddConvertToUnknownForNonOverlappingTypes(context) { const changes = textChanges.ChangeTracker.with(context, t => makeChange(t, context.sourceFile, context.span.start)); return [createCodeFixAction(fixId, changes, Diagnostics.Add_unknown_conversion_for_non_overlapping_types, fixId, Diagnostics.Add_unknown_to_all_conversions_of_non_overlapping_types)]; }, diff --git a/src/services/codefixes/addEmptyExportDeclaration.ts b/src/services/codefixes/addEmptyExportDeclaration.ts index ad68d5e0d40e5..de0dee3acbc63 100644 --- a/src/services/codefixes/addEmptyExportDeclaration.ts +++ b/src/services/codefixes/addEmptyExportDeclaration.ts @@ -5,7 +5,7 @@ namespace ts.codefix { Diagnostics.await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module.code, Diagnostics.for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module.code, ], - getCodeActions: context => { + getCodeActions: function getCodeActionsToAddEmptyExportDeclaration(context) { const { sourceFile } = context; const changes = textChanges.ChangeTracker.with(context, changes => { const exportDeclaration = factory.createExportDeclaration( diff --git a/src/services/codefixes/addMissingAsync.ts b/src/services/codefixes/addMissingAsync.ts index 5876805ee1c02..bb076588a4540 100644 --- a/src/services/codefixes/addMissingAsync.ts +++ b/src/services/codefixes/addMissingAsync.ts @@ -11,7 +11,7 @@ namespace ts.codefix { registerCodeFix({ fixIds: [fixId], errorCodes, - getCodeActions: context => { + getCodeActions: function getCodeActionsToAddMissingAsync(context) { const { sourceFile, errorCode, cancellationToken, program, span } = context; const diagnostic = find(program.getDiagnosticsProducingTypeChecker().getDiagnostics(sourceFile, cancellationToken), getIsMatchingAsyncError(span, errorCode)); const directSpan = diagnostic && diagnostic.relatedInformation && find(diagnostic.relatedInformation, r => r.code === Diagnostics.Did_you_mean_to_mark_this_function_as_async.code) as TextSpan | undefined; diff --git a/src/services/codefixes/addMissingAwait.ts b/src/services/codefixes/addMissingAwait.ts index 01f7ece1a0388..3853a52b7249f 100644 --- a/src/services/codefixes/addMissingAwait.ts +++ b/src/services/codefixes/addMissingAwait.ts @@ -30,7 +30,7 @@ namespace ts.codefix { registerCodeFix({ fixIds: [fixId], errorCodes, - getCodeActions: context => { + getCodeActions: function getCodeActionsToAddMissingAwait(context) { const { sourceFile, errorCode, span, cancellationToken, program } = context; const expression = getAwaitErrorSpanExpression(sourceFile, errorCode, span, cancellationToken, program); if (!expression) { diff --git a/src/services/codefixes/addMissingConst.ts b/src/services/codefixes/addMissingConst.ts index 5f15572c9789f..9c0c7979cb3e5 100644 --- a/src/services/codefixes/addMissingConst.ts +++ b/src/services/codefixes/addMissingConst.ts @@ -8,7 +8,7 @@ namespace ts.codefix { registerCodeFix({ errorCodes, - getCodeActions: (context) => { + getCodeActions: function getCodeActionsToAddMissingConst(context) { const changes = textChanges.ChangeTracker.with(context, t => makeChange(t, context.sourceFile, context.span.start, context.program)); if (changes.length > 0) { return [createCodeFixAction(fixId, changes, Diagnostics.Add_const_to_unresolved_variable, fixId, Diagnostics.Add_const_to_all_unresolved_variables)]; diff --git a/src/services/codefixes/addMissingDeclareProperty.ts b/src/services/codefixes/addMissingDeclareProperty.ts index f7b9369f95715..6774e8749cf7a 100644 --- a/src/services/codefixes/addMissingDeclareProperty.ts +++ b/src/services/codefixes/addMissingDeclareProperty.ts @@ -7,7 +7,7 @@ namespace ts.codefix { registerCodeFix({ errorCodes, - getCodeActions: (context) => { + getCodeActions: function getCodeActionsToAddMissingDeclareOnProperty(context) { const changes = textChanges.ChangeTracker.with(context, t => makeChange(t, context.sourceFile, context.span.start)); if (changes.length > 0) { return [createCodeFixAction(fixId, changes, Diagnostics.Prefix_with_declare, fixId, Diagnostics.Prefix_all_incorrect_property_declarations_with_declare)]; diff --git a/src/services/codefixes/addMissingInvocationForDecorator.ts b/src/services/codefixes/addMissingInvocationForDecorator.ts index e772b4a82f267..22ce4eef384e1 100644 --- a/src/services/codefixes/addMissingInvocationForDecorator.ts +++ b/src/services/codefixes/addMissingInvocationForDecorator.ts @@ -4,7 +4,7 @@ namespace ts.codefix { const errorCodes = [Diagnostics._0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write_0.code]; registerCodeFix({ errorCodes, - getCodeActions: (context) => { + getCodeActions: function getCodeActionsToAddMissingInvocationForDecorator(context) { const changes = textChanges.ChangeTracker.with(context, t => makeChange(t, context.sourceFile, context.span.start)); return [createCodeFixAction(fixId, changes, Diagnostics.Call_decorator_expression, fixId, Diagnostics.Add_to_all_uncalled_decorators)]; }, diff --git a/src/services/codefixes/addNameToNamelessParameter.ts b/src/services/codefixes/addNameToNamelessParameter.ts index bd53c23743239..d9aec73ee966e 100644 --- a/src/services/codefixes/addNameToNamelessParameter.ts +++ b/src/services/codefixes/addNameToNamelessParameter.ts @@ -4,7 +4,7 @@ namespace ts.codefix { const errorCodes = [Diagnostics.Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1.code]; registerCodeFix({ errorCodes, - getCodeActions: (context) => { + getCodeActions: function getCodeActionsToAddNameToNamelessParameter(context) { const changes = textChanges.ChangeTracker.with(context, t => makeChange(t, context.sourceFile, context.span.start)); return [createCodeFixAction(fixId, changes, Diagnostics.Add_parameter_name, fixId, Diagnostics.Add_names_to_all_parameters_without_names)]; }, diff --git a/src/services/codefixes/convertConstToLet.ts b/src/services/codefixes/convertConstToLet.ts index fddb697911c77..4036f93632e4e 100644 --- a/src/services/codefixes/convertConstToLet.ts +++ b/src/services/codefixes/convertConstToLet.ts @@ -5,7 +5,7 @@ namespace ts.codefix { registerCodeFix({ errorCodes, - getCodeActions: context => { + getCodeActions: function getCodeActionsToConvertConstToLet(context) { const { sourceFile, span, program } = context; const range = getConstTokenRange(sourceFile, span.start, program); if (range === undefined) return; diff --git a/src/services/codefixes/convertLiteralTypeToMappedType.ts b/src/services/codefixes/convertLiteralTypeToMappedType.ts index edcbbe0c0ce59..b6b2fd83a6f7b 100644 --- a/src/services/codefixes/convertLiteralTypeToMappedType.ts +++ b/src/services/codefixes/convertLiteralTypeToMappedType.ts @@ -5,7 +5,7 @@ namespace ts.codefix { registerCodeFix({ errorCodes, - getCodeActions: context => { + getCodeActions: function getCodeActionsToConvertLiteralTypeToMappedType(context) { const { sourceFile, span } = context; const info = getInfo(sourceFile, span.start); if (!info) { diff --git a/src/services/codefixes/convertToMappedObjectType.ts b/src/services/codefixes/convertToMappedObjectType.ts index dc6c2f5cd504d..340fcf2257ce0 100644 --- a/src/services/codefixes/convertToMappedObjectType.ts +++ b/src/services/codefixes/convertToMappedObjectType.ts @@ -1,14 +1,13 @@ /* @internal */ namespace ts.codefix { - const fixIdAddMissingTypeof = "fixConvertToMappedObjectType"; - const fixId = fixIdAddMissingTypeof; + const fixId = "fixConvertToMappedObjectType"; const errorCodes = [Diagnostics.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead.code]; type FixableDeclaration = InterfaceDeclaration | TypeAliasDeclaration; registerCodeFix({ errorCodes, - getCodeActions: context => { + getCodeActions: function getCodeActionsToConvertToMappedTypeObject(context) { const { sourceFile, span } = context; const info = getInfo(sourceFile, span.start); if (!info) return undefined; diff --git a/src/services/codefixes/convertToTypeOnlyExport.ts b/src/services/codefixes/convertToTypeOnlyExport.ts index 8ff0b57ea099d..8cd4be7a20e60 100644 --- a/src/services/codefixes/convertToTypeOnlyExport.ts +++ b/src/services/codefixes/convertToTypeOnlyExport.ts @@ -4,14 +4,14 @@ namespace ts.codefix { const fixId = "convertToTypeOnlyExport"; registerCodeFix({ errorCodes, - getCodeActions: context => { + getCodeActions: function getCodeActionsToConvertToTypeOnlyExport(context) { const changes = textChanges.ChangeTracker.with(context, t => fixSingleExportDeclaration(t, getExportSpecifierForDiagnosticSpan(context.span, context.sourceFile), context)); if (changes.length) { return [createCodeFixAction(fixId, changes, Diagnostics.Convert_to_type_only_export, fixId, Diagnostics.Convert_all_re_exported_types_to_type_only_exports)]; } }, fixIds: [fixId], - getAllCodeActions: context => { + getAllCodeActions: function getAllCodeActionsToConvertToTypeOnlyExport(context) { const fixedExportDeclarations = new Map(); return codeFixAll(context, errorCodes, (changes, diag) => { const exportSpecifier = getExportSpecifierForDiagnosticSpan(diag, context.sourceFile); diff --git a/src/services/codefixes/convertToTypeOnlyImport.ts b/src/services/codefixes/convertToTypeOnlyImport.ts index 51d34a885fb06..0f92c4108cfba 100644 --- a/src/services/codefixes/convertToTypeOnlyImport.ts +++ b/src/services/codefixes/convertToTypeOnlyImport.ts @@ -4,7 +4,7 @@ namespace ts.codefix { const fixId = "convertToTypeOnlyImport"; registerCodeFix({ errorCodes, - getCodeActions: context => { + getCodeActions: function getCodeActionsToConvertToTypeOnlyImport(context) { const changes = textChanges.ChangeTracker.with(context, t => { const importDeclaration = getImportDeclarationForDiagnosticSpan(context.span, context.sourceFile); fixSingleImportDeclaration(t, importDeclaration, context); @@ -14,7 +14,7 @@ namespace ts.codefix { } }, fixIds: [fixId], - getAllCodeActions: context => { + getAllCodeActions: function getAllCodeActionsToConvertToTypeOnlyImport(context) { return codeFixAll(context, errorCodes, (changes, diag) => { const importDeclaration = getImportDeclarationForDiagnosticSpan(diag, context.sourceFile); fixSingleImportDeclaration(changes, importDeclaration, context); diff --git a/src/services/codefixes/disableJsDiagnostics.ts b/src/services/codefixes/disableJsDiagnostics.ts index 4469ffb6b716f..565a2dfe49491 100644 --- a/src/services/codefixes/disableJsDiagnostics.ts +++ b/src/services/codefixes/disableJsDiagnostics.ts @@ -9,7 +9,7 @@ namespace ts.codefix { registerCodeFix({ errorCodes, - getCodeActions(context) { + getCodeActions: function getCodeActionsToDisableJsDiagnostics(context) { const { sourceFile, program, span, host, formatContext } = context; if (!isInJSFile(sourceFile) || !isCheckJsEnabledForFile(sourceFile, program.getCompilerOptions())) { diff --git a/src/services/codefixes/fixAddModuleReferTypeMissingTypeof.ts b/src/services/codefixes/fixAddModuleReferTypeMissingTypeof.ts index f8f5f74ba282c..cd647bc23578d 100644 --- a/src/services/codefixes/fixAddModuleReferTypeMissingTypeof.ts +++ b/src/services/codefixes/fixAddModuleReferTypeMissingTypeof.ts @@ -6,7 +6,7 @@ namespace ts.codefix { registerCodeFix({ errorCodes, - getCodeActions: context => { + getCodeActions: function getCodeActionsToAddMissingTypeof(context) { const { sourceFile, span } = context; const importType = getImportTypeNode(sourceFile, span.start); const changes = textChanges.ChangeTracker.with(context, t => doChange(t, sourceFile, importType)); diff --git a/src/services/codefixes/fixAwaitInSyncFunction.ts b/src/services/codefixes/fixAwaitInSyncFunction.ts index 0f0f2880ec325..be93c1d711b2f 100644 --- a/src/services/codefixes/fixAwaitInSyncFunction.ts +++ b/src/services/codefixes/fixAwaitInSyncFunction.ts @@ -15,7 +15,7 @@ namespace ts.codefix { return [createCodeFixAction(fixId, changes, Diagnostics.Add_async_modifier_to_containing_function, fixId, Diagnostics.Add_all_missing_async_modifiers)]; }, fixIds: [fixId], - getAllCodeActions: context => { + getAllCodeActions: function getAllCodeActionsToFixAwaitInSyncFunction(context) { const seen = new Map(); return codeFixAll(context, errorCodes, (changes, diag) => { const nodes = getNodes(diag.file, diag.start); diff --git a/src/services/codefixes/fixCannotFindModule.ts b/src/services/codefixes/fixCannotFindModule.ts index c2cb825b5e03f..98c4f058d3f4f 100644 --- a/src/services/codefixes/fixCannotFindModule.ts +++ b/src/services/codefixes/fixCannotFindModule.ts @@ -10,7 +10,7 @@ namespace ts.codefix { ]; registerCodeFix({ errorCodes, - getCodeActions: context => { + getCodeActions: function getCodeActionsToFixNotFoundModule(context) { const { host, sourceFile, span: { start } } = context; const packageName = tryGetImportedPackageName(sourceFile, start); if (packageName === undefined) return undefined; diff --git a/src/services/codefixes/fixClassDoesntImplementInheritedAbstractMember.ts b/src/services/codefixes/fixClassDoesntImplementInheritedAbstractMember.ts index 18b61f9ecd0d5..bfcd890dea9b4 100644 --- a/src/services/codefixes/fixClassDoesntImplementInheritedAbstractMember.ts +++ b/src/services/codefixes/fixClassDoesntImplementInheritedAbstractMember.ts @@ -7,14 +7,14 @@ namespace ts.codefix { const fixId = "fixClassDoesntImplementInheritedAbstractMember"; registerCodeFix({ errorCodes, - getCodeActions(context) { + getCodeActions: function getCodeActionsToFixClassNotImplementingInheritedMembers(context) { const { sourceFile, span } = context; const changes = textChanges.ChangeTracker.with(context, t => addMissingMembers(getClass(sourceFile, span.start), sourceFile, context, t, context.preferences)); return changes.length === 0 ? undefined : [createCodeFixAction(fixId, changes, Diagnostics.Implement_inherited_abstract_class, fixId, Diagnostics.Implement_all_inherited_abstract_classes)]; }, fixIds: [fixId], - getAllCodeActions: context => { + getAllCodeActions: function getAllCodeActionsToFixClassDoesntImplementInheritedAbstractMember(context) { const seenClassDeclarations = new Map(); return codeFixAll(context, errorCodes, (changes, diag) => { const classDeclaration = getClass(diag.file, diag.start); diff --git a/src/services/codefixes/fixEnableExperimentalDecorators.ts b/src/services/codefixes/fixEnableExperimentalDecorators.ts index 13ff16945a477..5af8e8d248e22 100644 --- a/src/services/codefixes/fixEnableExperimentalDecorators.ts +++ b/src/services/codefixes/fixEnableExperimentalDecorators.ts @@ -6,7 +6,7 @@ namespace ts.codefix { ]; registerCodeFix({ errorCodes, - getCodeActions: (context) => { + getCodeActions: function getCodeActionsToEnableExperimentalDecorators(context) { const { configFile } = context.program.getCompilerOptions(); if (configFile === undefined) { return undefined; diff --git a/src/services/codefixes/fixEnableJsxFlag.ts b/src/services/codefixes/fixEnableJsxFlag.ts index f077880bc3c42..a77f93993689e 100644 --- a/src/services/codefixes/fixEnableJsxFlag.ts +++ b/src/services/codefixes/fixEnableJsxFlag.ts @@ -4,7 +4,7 @@ namespace ts.codefix { const errorCodes = [Diagnostics.Cannot_use_JSX_unless_the_jsx_flag_is_provided.code]; registerCodeFix({ errorCodes, - getCodeActions: context => { + getCodeActions: function getCodeActionsToFixEnableJsxFlag(context) { const { configFile } = context.program.getCompilerOptions(); if (configFile === undefined) { return undefined; diff --git a/src/services/codefixes/fixIncorrectNamedTupleSyntax.ts b/src/services/codefixes/fixIncorrectNamedTupleSyntax.ts index a806e19f654c2..084adb2404b69 100644 --- a/src/services/codefixes/fixIncorrectNamedTupleSyntax.ts +++ b/src/services/codefixes/fixIncorrectNamedTupleSyntax.ts @@ -8,7 +8,7 @@ namespace ts.codefix { registerCodeFix({ errorCodes, - getCodeActions: context => { + getCodeActions: function getCodeActionsToFixIncorrectNamedTupleSyntax(context) { const { sourceFile, span } = context; const namedTupleMember = getNamedTupleMember(sourceFile, span.start); const changes = textChanges.ChangeTracker.with(context, t => doChange(t, sourceFile, namedTupleMember)); diff --git a/src/services/codefixes/fixModuleAndTargetOptions.ts b/src/services/codefixes/fixModuleAndTargetOptions.ts index 93659c72be742..c2d72d291e352 100644 --- a/src/services/codefixes/fixModuleAndTargetOptions.ts +++ b/src/services/codefixes/fixModuleAndTargetOptions.ts @@ -5,7 +5,7 @@ namespace ts.codefix { Diagnostics.Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher.code, Diagnostics.Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher.code, ], - getCodeActions: context => { + getCodeActions: function getCodeActionsToFixModuleAndTarget(context) { const compilerOptions = context.program.getCompilerOptions(); const { configFile } = compilerOptions; if (configFile === undefined) { diff --git a/src/services/codefixes/fixOverrideModifier.ts b/src/services/codefixes/fixOverrideModifier.ts index d267dececcf70..ef9962ecbdf11 100644 --- a/src/services/codefixes/fixOverrideModifier.ts +++ b/src/services/codefixes/fixOverrideModifier.ts @@ -40,7 +40,7 @@ namespace ts.codefix { registerCodeFix({ errorCodes, - getCodeActions: context => { + getCodeActions: function getCodeActionsToFixOverrideModifierIssues(context) { const { errorCode, span, sourceFile } = context; const info = errorCodeFixIdMap[errorCode]; diff --git a/src/services/codefixes/fixReturnTypeInAsyncFunction.ts b/src/services/codefixes/fixReturnTypeInAsyncFunction.ts index 6d27b8030d574..15b3722fd45ae 100644 --- a/src/services/codefixes/fixReturnTypeInAsyncFunction.ts +++ b/src/services/codefixes/fixReturnTypeInAsyncFunction.ts @@ -15,7 +15,7 @@ namespace ts.codefix { registerCodeFix({ errorCodes, fixIds: [fixId], - getCodeActions: context => { + getCodeActions: function getCodeActionsToFixReturnTypeInAsyncFunction(context) { const { sourceFile, program, span } = context; const checker = program.getTypeChecker(); const info = getInfo(sourceFile, program.getTypeChecker(), span.start); diff --git a/src/services/codefixes/fixStrictClassInitialization.ts b/src/services/codefixes/fixStrictClassInitialization.ts index 37cb7ffa74224..717b109a82ea4 100644 --- a/src/services/codefixes/fixStrictClassInitialization.ts +++ b/src/services/codefixes/fixStrictClassInitialization.ts @@ -7,7 +7,7 @@ namespace ts.codefix { const errorCodes = [Diagnostics.Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor.code]; registerCodeFix({ errorCodes, - getCodeActions: (context) => { + getCodeActions: function getCodeActionsForStrictClassInitializationErrors(context) { const propertyDeclaration = getPropertyDeclaration(context.sourceFile, context.span.start); if (!propertyDeclaration) return; diff --git a/src/services/codefixes/removeUnnecessaryAwait.ts b/src/services/codefixes/removeUnnecessaryAwait.ts index 07028e2793762..59e786ccd2cb8 100644 --- a/src/services/codefixes/removeUnnecessaryAwait.ts +++ b/src/services/codefixes/removeUnnecessaryAwait.ts @@ -7,7 +7,7 @@ namespace ts.codefix { registerCodeFix({ errorCodes, - getCodeActions: (context) => { + getCodeActions: function getCodeActionsToRemoveUnnecessaryAwait(context) { const changes = textChanges.ChangeTracker.with(context, t => makeChange(t, context.sourceFile, context.span)); if (changes.length > 0) { return [createCodeFixAction(fixId, changes, Diagnostics.Remove_unnecessary_await, fixId, Diagnostics.Remove_all_unnecessary_uses_of_await)]; diff --git a/src/services/codefixes/returnValueCorrect.ts b/src/services/codefixes/returnValueCorrect.ts index c7631607e1feb..33d32c0ed085d 100644 --- a/src/services/codefixes/returnValueCorrect.ts +++ b/src/services/codefixes/returnValueCorrect.ts @@ -36,7 +36,7 @@ namespace ts.codefix { registerCodeFix({ errorCodes, fixIds: [fixIdAddReturnStatement, fixRemoveBracesFromArrowFunctionBody, fixIdWrapTheBlockWithParen], - getCodeActions: context => { + getCodeActions: function getCodeActionsToCorrectReturnValue(context) { const { program, sourceFile, span: { start }, errorCode } = context; const info = getInfo(program.getTypeChecker(), sourceFile, start, errorCode); if (!info) return undefined; diff --git a/src/services/codefixes/splitTypeOnlyImport.ts b/src/services/codefixes/splitTypeOnlyImport.ts index 10f8d311a8fc4..d4138bf20e892 100644 --- a/src/services/codefixes/splitTypeOnlyImport.ts +++ b/src/services/codefixes/splitTypeOnlyImport.ts @@ -5,7 +5,7 @@ namespace ts.codefix { registerCodeFix({ errorCodes, fixIds: [fixId], - getCodeActions: context => { + getCodeActions: function getCodeActionsToSplitTypeOnlyImport(context) { const changes = textChanges.ChangeTracker.with(context, t => { return splitTypeOnlyImport(t, getImportDeclaration(context.sourceFile, context.span), context); }); diff --git a/src/services/codefixes/useBigintLiteral.ts b/src/services/codefixes/useBigintLiteral.ts index f521386f85e2f..0b174e5915e1f 100644 --- a/src/services/codefixes/useBigintLiteral.ts +++ b/src/services/codefixes/useBigintLiteral.ts @@ -7,7 +7,7 @@ namespace ts.codefix { registerCodeFix({ errorCodes, - getCodeActions: context => { + getCodeActions: function getCodeActionsToUseBigintLiteral(context) { const changes = textChanges.ChangeTracker.with(context, t => makeChange(t, context.sourceFile, context.span)); if (changes.length > 0) { return [createCodeFixAction(fixId, changes, Diagnostics.Convert_to_a_bigint_numeric_literal, fixId, Diagnostics.Convert_all_to_bigint_numeric_literals)]; diff --git a/src/services/codefixes/wrapJsxInFragment.ts b/src/services/codefixes/wrapJsxInFragment.ts index c70ee0833d77d..a1ce0650a3139 100644 --- a/src/services/codefixes/wrapJsxInFragment.ts +++ b/src/services/codefixes/wrapJsxInFragment.ts @@ -4,7 +4,7 @@ namespace ts.codefix { const errorCodes = [Diagnostics.JSX_expressions_must_have_one_parent_element.code]; registerCodeFix({ errorCodes, - getCodeActions: context => { + getCodeActions: function getCodeActionsToWrapJsxInFragment(context) { const { sourceFile, span } = context; const node = findNodeToFix(sourceFile, span.start); if (!node) return undefined; From c9f6b0750ad0f8175d470d1764bd7e116db0d408 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Mon, 8 Nov 2021 10:54:50 -0800 Subject: [PATCH 2/3] Remove double space. --- src/services/codefixes/disableJsDiagnostics.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/codefixes/disableJsDiagnostics.ts b/src/services/codefixes/disableJsDiagnostics.ts index 565a2dfe49491..b5645ca394706 100644 --- a/src/services/codefixes/disableJsDiagnostics.ts +++ b/src/services/codefixes/disableJsDiagnostics.ts @@ -9,7 +9,7 @@ namespace ts.codefix { registerCodeFix({ errorCodes, - getCodeActions: function getCodeActionsToDisableJsDiagnostics(context) { + getCodeActions: function getCodeActionsToDisableJsDiagnostics(context) { const { sourceFile, program, span, host, formatContext } = context; if (!isInJSFile(sourceFile) || !isCheckJsEnabledForFile(sourceFile, program.getCompilerOptions())) { From e01927271e242115e16bd82f685dbf2b4551891a Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 16 Nov 2021 12:34:00 -0700 Subject: [PATCH 3/3] Undo CRLF -> LF change. --- src/services/codefixes/fixOverrideModifier.ts | 384 +++++++++--------- 1 file changed, 192 insertions(+), 192 deletions(-) diff --git a/src/services/codefixes/fixOverrideModifier.ts b/src/services/codefixes/fixOverrideModifier.ts index 6e67825ac2fc3..1eb9531130d3e 100644 --- a/src/services/codefixes/fixOverrideModifier.ts +++ b/src/services/codefixes/fixOverrideModifier.ts @@ -1,192 +1,192 @@ -/* @internal */ -namespace ts.codefix { - const fixName = "fixOverrideModifier"; - const fixAddOverrideId = "fixAddOverrideModifier"; - const fixRemoveOverrideId = "fixRemoveOverrideModifier"; - - type ClassElementLikeHasJSDoc = - | ConstructorDeclaration - | PropertyDeclaration - | MethodDeclaration - | GetAccessorDeclaration - | SetAccessorDeclaration - | ParameterPropertyDeclaration; - - const errorCodes = [ - Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0.code, - Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class.code, - Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0.code, - Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0.code, - Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0.code, - Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code, - Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class.code, - Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code, - Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0.code, - ]; - - interface ErrorCodeFixInfo { - descriptions: DiagnosticMessage; - fixId?: string | undefined; - fixAllDescriptions?: DiagnosticMessage | undefined; - } - - const errorCodeFixIdMap: Record = { - // case #1: - [Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0.code]: { - descriptions: Diagnostics.Add_override_modifier, - fixId: fixAddOverrideId, - fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers, - }, - [Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code]: { - descriptions: Diagnostics.Add_override_modifier, - fixId: fixAddOverrideId, - fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers - }, - // case #2: - [Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class.code]: { - descriptions: Diagnostics.Remove_override_modifier, - fixId: fixRemoveOverrideId, - fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers, - }, - [Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class.code]: { - descriptions: Diagnostics.Remove_override_modifier, - fixId: fixRemoveOverrideId, - fixAllDescriptions: Diagnostics.Remove_override_modifier - }, - // case #3: - [Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0.code]: { - descriptions: Diagnostics.Add_override_modifier, - fixId: fixAddOverrideId, - fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers, - }, - [Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code]: { - descriptions: Diagnostics.Add_override_modifier, - fixId: fixAddOverrideId, - fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers, - }, - // case #4: - [Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0.code]: { - descriptions: Diagnostics.Add_override_modifier, - fixId: fixAddOverrideId, - fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers, - }, - // case #5: - [Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0.code]: { - descriptions: Diagnostics.Remove_override_modifier, - fixId: fixRemoveOverrideId, - fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers, - }, - [Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0.code]: { - descriptions: Diagnostics.Remove_override_modifier, - fixId: fixRemoveOverrideId, - fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers, - } - }; - - registerCodeFix({ - errorCodes, - getCodeActions: function getCodeActionsToFixOverrideModifierIssues(context) { - const { errorCode, span } = context; - - const info = errorCodeFixIdMap[errorCode]; - if (!info) return emptyArray; - - const { descriptions, fixId, fixAllDescriptions } = info; - const changes = textChanges.ChangeTracker.with(context, changes => dispatchChanges(changes, context, errorCode, span.start)); - - return [ - createCodeFixActionMaybeFixAll(fixName, changes, descriptions, fixId, fixAllDescriptions) - ]; - }, - fixIds: [fixName, fixAddOverrideId, fixRemoveOverrideId], - getAllCodeActions: context => - codeFixAll(context, errorCodes, (changes, diag) => { - const { code, start } = diag; - const info = errorCodeFixIdMap[code]; - if (!info || info.fixId !== context.fixId) { - return; - } - - dispatchChanges(changes, context, code, start); - }) - }); - - function dispatchChanges( - changeTracker: textChanges.ChangeTracker, - context: CodeFixContext | CodeFixAllContext, - errorCode: number, - pos: number) { - switch (errorCode) { - case Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0.code: - case Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code: - case Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0.code: - case Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0.code: - case Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code: - return doAddOverrideModifierChange(changeTracker, context.sourceFile, pos); - case Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0.code: - case Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0.code: - case Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class.code: - case Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class.code: - return doRemoveOverrideModifierChange(changeTracker, context.sourceFile, pos); - default: - Debug.fail("Unexpected error code: " + errorCode); - } - } - - function doAddOverrideModifierChange(changeTracker: textChanges.ChangeTracker, sourceFile: SourceFile, pos: number) { - const classElement = findContainerClassElementLike(sourceFile, pos); - if (isSourceFileJS(sourceFile)) { - changeTracker.addJSDocTags(sourceFile, classElement, [factory.createJSDocOverrideTag(factory.createIdentifier("override"))]); - return; - } - const modifiers = classElement.modifiers || emptyArray; - const staticModifier = find(modifiers, isStaticModifier); - const abstractModifier = find(modifiers, isAbstractModifier); - const accessibilityModifier = find(modifiers, m => isAccessibilityModifier(m.kind)); - const modifierPos = abstractModifier ? abstractModifier.end : - staticModifier ? staticModifier.end : - accessibilityModifier ? accessibilityModifier.end : - classElement.decorators ? skipTrivia(sourceFile.text, classElement.decorators.end) : classElement.getStart(sourceFile); - const options = accessibilityModifier || staticModifier || abstractModifier ? { prefix: " " } : { suffix: " " }; - changeTracker.insertModifierAt(sourceFile, modifierPos, SyntaxKind.OverrideKeyword, options); - } - - function doRemoveOverrideModifierChange(changeTracker: textChanges.ChangeTracker, sourceFile: SourceFile, pos: number) { - const classElement = findContainerClassElementLike(sourceFile, pos); - if (isSourceFileJS(sourceFile)) { - changeTracker.filterJSDocTags(sourceFile, classElement, not(isJSDocOverrideTag)); - return; - } - const overrideModifier = classElement.modifiers && find(classElement.modifiers, modifier => modifier.kind === SyntaxKind.OverrideKeyword); - Debug.assertIsDefined(overrideModifier); - - changeTracker.deleteModifier(sourceFile, overrideModifier); - } - - function isClassElementLikeHasJSDoc(node: Node): node is ClassElementLikeHasJSDoc { - switch (node.kind) { - case SyntaxKind.Constructor: - case SyntaxKind.PropertyDeclaration: - case SyntaxKind.MethodDeclaration: - case SyntaxKind.GetAccessor: - case SyntaxKind.SetAccessor: - return true; - case SyntaxKind.Parameter: - return isParameterPropertyDeclaration(node, node.parent); - default: - return false; - } - } - - function findContainerClassElementLike(sourceFile: SourceFile, pos: number) { - const token = getTokenAtPosition(sourceFile, pos); - const classElement = findAncestor(token, node => { - if (isClassLike(node)) return "quit"; - return isClassElementLikeHasJSDoc(node); - }); - - Debug.assert(classElement && isClassElementLikeHasJSDoc(classElement)); - return classElement; - } -} - +/* @internal */ +namespace ts.codefix { + const fixName = "fixOverrideModifier"; + const fixAddOverrideId = "fixAddOverrideModifier"; + const fixRemoveOverrideId = "fixRemoveOverrideModifier"; + + type ClassElementLikeHasJSDoc = + | ConstructorDeclaration + | PropertyDeclaration + | MethodDeclaration + | GetAccessorDeclaration + | SetAccessorDeclaration + | ParameterPropertyDeclaration; + + const errorCodes = [ + Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0.code, + Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class.code, + Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0.code, + Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0.code, + Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0.code, + Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code, + Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class.code, + Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code, + Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0.code, + ]; + + interface ErrorCodeFixInfo { + descriptions: DiagnosticMessage; + fixId?: string | undefined; + fixAllDescriptions?: DiagnosticMessage | undefined; + } + + const errorCodeFixIdMap: Record = { + // case #1: + [Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0.code]: { + descriptions: Diagnostics.Add_override_modifier, + fixId: fixAddOverrideId, + fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers, + }, + [Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code]: { + descriptions: Diagnostics.Add_override_modifier, + fixId: fixAddOverrideId, + fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers + }, + // case #2: + [Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class.code]: { + descriptions: Diagnostics.Remove_override_modifier, + fixId: fixRemoveOverrideId, + fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers, + }, + [Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class.code]: { + descriptions: Diagnostics.Remove_override_modifier, + fixId: fixRemoveOverrideId, + fixAllDescriptions: Diagnostics.Remove_override_modifier + }, + // case #3: + [Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0.code]: { + descriptions: Diagnostics.Add_override_modifier, + fixId: fixAddOverrideId, + fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers, + }, + [Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code]: { + descriptions: Diagnostics.Add_override_modifier, + fixId: fixAddOverrideId, + fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers, + }, + // case #4: + [Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0.code]: { + descriptions: Diagnostics.Add_override_modifier, + fixId: fixAddOverrideId, + fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers, + }, + // case #5: + [Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0.code]: { + descriptions: Diagnostics.Remove_override_modifier, + fixId: fixRemoveOverrideId, + fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers, + }, + [Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0.code]: { + descriptions: Diagnostics.Remove_override_modifier, + fixId: fixRemoveOverrideId, + fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers, + } + }; + + registerCodeFix({ + errorCodes, + getCodeActions: function getCodeActionsToFixOverrideModifierIssues(context) { + const { errorCode, span } = context; + + const info = errorCodeFixIdMap[errorCode]; + if (!info) return emptyArray; + + const { descriptions, fixId, fixAllDescriptions } = info; + const changes = textChanges.ChangeTracker.with(context, changes => dispatchChanges(changes, context, errorCode, span.start)); + + return [ + createCodeFixActionMaybeFixAll(fixName, changes, descriptions, fixId, fixAllDescriptions) + ]; + }, + fixIds: [fixName, fixAddOverrideId, fixRemoveOverrideId], + getAllCodeActions: context => + codeFixAll(context, errorCodes, (changes, diag) => { + const { code, start } = diag; + const info = errorCodeFixIdMap[code]; + if (!info || info.fixId !== context.fixId) { + return; + } + + dispatchChanges(changes, context, code, start); + }) + }); + + function dispatchChanges( + changeTracker: textChanges.ChangeTracker, + context: CodeFixContext | CodeFixAllContext, + errorCode: number, + pos: number) { + switch (errorCode) { + case Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0.code: + case Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code: + case Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0.code: + case Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0.code: + case Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code: + return doAddOverrideModifierChange(changeTracker, context.sourceFile, pos); + case Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0.code: + case Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0.code: + case Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class.code: + case Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class.code: + return doRemoveOverrideModifierChange(changeTracker, context.sourceFile, pos); + default: + Debug.fail("Unexpected error code: " + errorCode); + } + } + + function doAddOverrideModifierChange(changeTracker: textChanges.ChangeTracker, sourceFile: SourceFile, pos: number) { + const classElement = findContainerClassElementLike(sourceFile, pos); + if (isSourceFileJS(sourceFile)) { + changeTracker.addJSDocTags(sourceFile, classElement, [factory.createJSDocOverrideTag(factory.createIdentifier("override"))]); + return; + } + const modifiers = classElement.modifiers || emptyArray; + const staticModifier = find(modifiers, isStaticModifier); + const abstractModifier = find(modifiers, isAbstractModifier); + const accessibilityModifier = find(modifiers, m => isAccessibilityModifier(m.kind)); + const modifierPos = abstractModifier ? abstractModifier.end : + staticModifier ? staticModifier.end : + accessibilityModifier ? accessibilityModifier.end : + classElement.decorators ? skipTrivia(sourceFile.text, classElement.decorators.end) : classElement.getStart(sourceFile); + const options = accessibilityModifier || staticModifier || abstractModifier ? { prefix: " " } : { suffix: " " }; + changeTracker.insertModifierAt(sourceFile, modifierPos, SyntaxKind.OverrideKeyword, options); + } + + function doRemoveOverrideModifierChange(changeTracker: textChanges.ChangeTracker, sourceFile: SourceFile, pos: number) { + const classElement = findContainerClassElementLike(sourceFile, pos); + if (isSourceFileJS(sourceFile)) { + changeTracker.filterJSDocTags(sourceFile, classElement, not(isJSDocOverrideTag)); + return; + } + const overrideModifier = classElement.modifiers && find(classElement.modifiers, modifier => modifier.kind === SyntaxKind.OverrideKeyword); + Debug.assertIsDefined(overrideModifier); + + changeTracker.deleteModifier(sourceFile, overrideModifier); + } + + function isClassElementLikeHasJSDoc(node: Node): node is ClassElementLikeHasJSDoc { + switch (node.kind) { + case SyntaxKind.Constructor: + case SyntaxKind.PropertyDeclaration: + case SyntaxKind.MethodDeclaration: + case SyntaxKind.GetAccessor: + case SyntaxKind.SetAccessor: + return true; + case SyntaxKind.Parameter: + return isParameterPropertyDeclaration(node, node.parent); + default: + return false; + } + } + + function findContainerClassElementLike(sourceFile: SourceFile, pos: number) { + const token = getTokenAtPosition(sourceFile, pos); + const classElement = findAncestor(token, node => { + if (isClassLike(node)) return "quit"; + return isClassElementLikeHasJSDoc(node); + }); + + Debug.assert(classElement && isClassElementLikeHasJSDoc(classElement)); + return classElement; + } +} +