Undo CRLF -> LF change.

This commit is contained in:
Daniel Rosenwasser 2021-11-16 12:34:00 -07:00
parent 5bcffa11d8
commit e01927271e

View file

@ -1,192 +1,192 @@
/* @internal */ /* @internal */
namespace ts.codefix { namespace ts.codefix {
const fixName = "fixOverrideModifier"; const fixName = "fixOverrideModifier";
const fixAddOverrideId = "fixAddOverrideModifier"; const fixAddOverrideId = "fixAddOverrideModifier";
const fixRemoveOverrideId = "fixRemoveOverrideModifier"; const fixRemoveOverrideId = "fixRemoveOverrideModifier";
type ClassElementLikeHasJSDoc = type ClassElementLikeHasJSDoc =
| ConstructorDeclaration | ConstructorDeclaration
| PropertyDeclaration | PropertyDeclaration
| MethodDeclaration | MethodDeclaration
| GetAccessorDeclaration | GetAccessorDeclaration
| SetAccessorDeclaration | SetAccessorDeclaration
| ParameterPropertyDeclaration; | ParameterPropertyDeclaration;
const errorCodes = [ 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_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_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_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_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_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_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_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_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, 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 { interface ErrorCodeFixInfo {
descriptions: DiagnosticMessage; descriptions: DiagnosticMessage;
fixId?: string | undefined; fixId?: string | undefined;
fixAllDescriptions?: DiagnosticMessage | undefined; fixAllDescriptions?: DiagnosticMessage | undefined;
} }
const errorCodeFixIdMap: Record<number, ErrorCodeFixInfo> = { const errorCodeFixIdMap: Record<number, ErrorCodeFixInfo> = {
// case #1: // case #1:
[Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_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]: {
descriptions: Diagnostics.Add_override_modifier, descriptions: Diagnostics.Add_override_modifier,
fixId: fixAddOverrideId, fixId: fixAddOverrideId,
fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers, 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]: { [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, descriptions: Diagnostics.Add_override_modifier,
fixId: fixAddOverrideId, fixId: fixAddOverrideId,
fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers
}, },
// case #2: // case #2:
[Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class.code]: { [Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class.code]: {
descriptions: Diagnostics.Remove_override_modifier, descriptions: Diagnostics.Remove_override_modifier,
fixId: fixRemoveOverrideId, fixId: fixRemoveOverrideId,
fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers, 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]: { [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, descriptions: Diagnostics.Remove_override_modifier,
fixId: fixRemoveOverrideId, fixId: fixRemoveOverrideId,
fixAllDescriptions: Diagnostics.Remove_override_modifier fixAllDescriptions: Diagnostics.Remove_override_modifier
}, },
// case #3: // case #3:
[Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0.code]: { [Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0.code]: {
descriptions: Diagnostics.Add_override_modifier, descriptions: Diagnostics.Add_override_modifier,
fixId: fixAddOverrideId, fixId: fixAddOverrideId,
fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers, 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]: { [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, descriptions: Diagnostics.Add_override_modifier,
fixId: fixAddOverrideId, fixId: fixAddOverrideId,
fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers, fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers,
}, },
// case #4: // 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]: { [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, descriptions: Diagnostics.Add_override_modifier,
fixId: fixAddOverrideId, fixId: fixAddOverrideId,
fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers, fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers,
}, },
// case #5: // case #5:
[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_it_is_not_declared_in_the_base_class_0.code]: {
descriptions: Diagnostics.Remove_override_modifier, descriptions: Diagnostics.Remove_override_modifier,
fixId: fixRemoveOverrideId, fixId: fixRemoveOverrideId,
fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers, 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]: { [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, descriptions: Diagnostics.Remove_override_modifier,
fixId: fixRemoveOverrideId, fixId: fixRemoveOverrideId,
fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers, fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers,
} }
}; };
registerCodeFix({ registerCodeFix({
errorCodes, errorCodes,
getCodeActions: function getCodeActionsToFixOverrideModifierIssues(context) { getCodeActions: function getCodeActionsToFixOverrideModifierIssues(context) {
const { errorCode, span } = context; const { errorCode, span } = context;
const info = errorCodeFixIdMap[errorCode]; const info = errorCodeFixIdMap[errorCode];
if (!info) return emptyArray; if (!info) return emptyArray;
const { descriptions, fixId, fixAllDescriptions } = info; const { descriptions, fixId, fixAllDescriptions } = info;
const changes = textChanges.ChangeTracker.with(context, changes => dispatchChanges(changes, context, errorCode, span.start)); const changes = textChanges.ChangeTracker.with(context, changes => dispatchChanges(changes, context, errorCode, span.start));
return [ return [
createCodeFixActionMaybeFixAll(fixName, changes, descriptions, fixId, fixAllDescriptions) createCodeFixActionMaybeFixAll(fixName, changes, descriptions, fixId, fixAllDescriptions)
]; ];
}, },
fixIds: [fixName, fixAddOverrideId, fixRemoveOverrideId], fixIds: [fixName, fixAddOverrideId, fixRemoveOverrideId],
getAllCodeActions: context => getAllCodeActions: context =>
codeFixAll(context, errorCodes, (changes, diag) => { codeFixAll(context, errorCodes, (changes, diag) => {
const { code, start } = diag; const { code, start } = diag;
const info = errorCodeFixIdMap[code]; const info = errorCodeFixIdMap[code];
if (!info || info.fixId !== context.fixId) { if (!info || info.fixId !== context.fixId) {
return; return;
} }
dispatchChanges(changes, context, code, start); dispatchChanges(changes, context, code, start);
}) })
}); });
function dispatchChanges( function dispatchChanges(
changeTracker: textChanges.ChangeTracker, changeTracker: textChanges.ChangeTracker,
context: CodeFixContext | CodeFixAllContext, context: CodeFixContext | CodeFixAllContext,
errorCode: number, errorCode: number,
pos: number) { pos: number) {
switch (errorCode) { 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_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_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_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_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: 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); 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_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_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_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: 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); return doRemoveOverrideModifierChange(changeTracker, context.sourceFile, pos);
default: default:
Debug.fail("Unexpected error code: " + errorCode); Debug.fail("Unexpected error code: " + errorCode);
} }
} }
function doAddOverrideModifierChange(changeTracker: textChanges.ChangeTracker, sourceFile: SourceFile, pos: number) { function doAddOverrideModifierChange(changeTracker: textChanges.ChangeTracker, sourceFile: SourceFile, pos: number) {
const classElement = findContainerClassElementLike(sourceFile, pos); const classElement = findContainerClassElementLike(sourceFile, pos);
if (isSourceFileJS(sourceFile)) { if (isSourceFileJS(sourceFile)) {
changeTracker.addJSDocTags(sourceFile, classElement, [factory.createJSDocOverrideTag(factory.createIdentifier("override"))]); changeTracker.addJSDocTags(sourceFile, classElement, [factory.createJSDocOverrideTag(factory.createIdentifier("override"))]);
return; return;
} }
const modifiers = classElement.modifiers || emptyArray; const modifiers = classElement.modifiers || emptyArray;
const staticModifier = find(modifiers, isStaticModifier); const staticModifier = find(modifiers, isStaticModifier);
const abstractModifier = find(modifiers, isAbstractModifier); const abstractModifier = find(modifiers, isAbstractModifier);
const accessibilityModifier = find(modifiers, m => isAccessibilityModifier(m.kind)); const accessibilityModifier = find(modifiers, m => isAccessibilityModifier(m.kind));
const modifierPos = abstractModifier ? abstractModifier.end : const modifierPos = abstractModifier ? abstractModifier.end :
staticModifier ? staticModifier.end : staticModifier ? staticModifier.end :
accessibilityModifier ? accessibilityModifier.end : accessibilityModifier ? accessibilityModifier.end :
classElement.decorators ? skipTrivia(sourceFile.text, classElement.decorators.end) : classElement.getStart(sourceFile); classElement.decorators ? skipTrivia(sourceFile.text, classElement.decorators.end) : classElement.getStart(sourceFile);
const options = accessibilityModifier || staticModifier || abstractModifier ? { prefix: " " } : { suffix: " " }; const options = accessibilityModifier || staticModifier || abstractModifier ? { prefix: " " } : { suffix: " " };
changeTracker.insertModifierAt(sourceFile, modifierPos, SyntaxKind.OverrideKeyword, options); changeTracker.insertModifierAt(sourceFile, modifierPos, SyntaxKind.OverrideKeyword, options);
} }
function doRemoveOverrideModifierChange(changeTracker: textChanges.ChangeTracker, sourceFile: SourceFile, pos: number) { function doRemoveOverrideModifierChange(changeTracker: textChanges.ChangeTracker, sourceFile: SourceFile, pos: number) {
const classElement = findContainerClassElementLike(sourceFile, pos); const classElement = findContainerClassElementLike(sourceFile, pos);
if (isSourceFileJS(sourceFile)) { if (isSourceFileJS(sourceFile)) {
changeTracker.filterJSDocTags(sourceFile, classElement, not(isJSDocOverrideTag)); changeTracker.filterJSDocTags(sourceFile, classElement, not(isJSDocOverrideTag));
return; return;
} }
const overrideModifier = classElement.modifiers && find(classElement.modifiers, modifier => modifier.kind === SyntaxKind.OverrideKeyword); const overrideModifier = classElement.modifiers && find(classElement.modifiers, modifier => modifier.kind === SyntaxKind.OverrideKeyword);
Debug.assertIsDefined(overrideModifier); Debug.assertIsDefined(overrideModifier);
changeTracker.deleteModifier(sourceFile, overrideModifier); changeTracker.deleteModifier(sourceFile, overrideModifier);
} }
function isClassElementLikeHasJSDoc(node: Node): node is ClassElementLikeHasJSDoc { function isClassElementLikeHasJSDoc(node: Node): node is ClassElementLikeHasJSDoc {
switch (node.kind) { switch (node.kind) {
case SyntaxKind.Constructor: case SyntaxKind.Constructor:
case SyntaxKind.PropertyDeclaration: case SyntaxKind.PropertyDeclaration:
case SyntaxKind.MethodDeclaration: case SyntaxKind.MethodDeclaration:
case SyntaxKind.GetAccessor: case SyntaxKind.GetAccessor:
case SyntaxKind.SetAccessor: case SyntaxKind.SetAccessor:
return true; return true;
case SyntaxKind.Parameter: case SyntaxKind.Parameter:
return isParameterPropertyDeclaration(node, node.parent); return isParameterPropertyDeclaration(node, node.parent);
default: default:
return false; return false;
} }
} }
function findContainerClassElementLike(sourceFile: SourceFile, pos: number) { function findContainerClassElementLike(sourceFile: SourceFile, pos: number) {
const token = getTokenAtPosition(sourceFile, pos); const token = getTokenAtPosition(sourceFile, pos);
const classElement = findAncestor(token, node => { const classElement = findAncestor(token, node => {
if (isClassLike(node)) return "quit"; if (isClassLike(node)) return "quit";
return isClassElementLikeHasJSDoc(node); return isClassElementLikeHasJSDoc(node);
}); });
Debug.assert(classElement && isClassElementLikeHasJSDoc(classElement)); Debug.assert(classElement && isClassElementLikeHasJSDoc(classElement));
return classElement; return classElement;
} }
} }