Rename of non-intrinsic JSX element should rename the declaration (#28066)

This commit is contained in:
Andy 2018-10-22 18:17:32 -07:00 committed by GitHub
parent 82773b8550
commit 5becc3b170
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 6 deletions

View File

@ -3089,7 +3089,7 @@ namespace ts {
export function isIntrinsicJsxName(name: __String | string) {
const ch = (name as string).charCodeAt(0);
return (ch >= CharacterCodes.a && ch <= CharacterCodes.z) || (name as string).indexOf("-") > -1;
return (ch >= CharacterCodes.a && ch <= CharacterCodes.z) || stringContains((name as string), "-");
}
function get16BitUnicodeEscapeSequence(charCode: number): string {

View File

@ -1542,7 +1542,7 @@ namespace ts {
synchronizeHostData();
const sourceFile = getValidSourceFile(fileName);
const node = getTouchingPropertyName(sourceFile, position);
if (isIdentifier(node) && isJsxOpeningElement(node.parent) || isJsxClosingElement(node.parent)) {
if (isIdentifier(node) && (isJsxOpeningElement(node.parent) || isJsxClosingElement(node.parent)) && isIntrinsicJsxName(node.escapedText)) {
const { openingElement, closingElement } = node.parent.parent;
return [openingElement, closingElement].map((node): RenameLocation =>
({ fileName: sourceFile.fileName, textSpan: createTextSpanFromNode(node.tagName, sourceFile) }));

View File

@ -1,15 +1,23 @@
/// <reference path='fourslash.ts' />
// @jsx: preserve
//@Filename: file.tsx
////declare module JSX {
//// interface Element {}
//// interface IntrinsicElements {}
//// interface IntrinsicElements {
//// div: {};
//// }
////}
////class [|MyClass|] {}
////
////<[|MyClass|]></[|MyClass|]>;
////<[|MyClass|]/>;
////
////<[|div|]> </[|div|]>
const [r0, r1, r2, r3] = test.ranges();
verify.renameLocations([r0, r3], [r0, r1, r2, r3]);
verify.renameLocations([r1, r2], [r1, r2]);
verify.noErrors();
const [r0, r1, r2, r3, d0, d1] = test.ranges();
verify.rangesAreRenameLocations([r0, r1, r2, r3]);
verify.rangesAreRenameLocations([d0, d1]);