Undo CRLF -> LF change.
This commit is contained in:
parent
5bcffa11d8
commit
e01927271e
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue