diff --git a/internal/ls/utilities.go b/internal/ls/utilities.go
index 433d170c8d..c46faf93f8 100644
--- a/internal/ls/utilities.go
+++ b/internal/ls/utilities.go
@@ -1647,20 +1647,24 @@ func getContainingObjectLiteralElementWorker(node *ast.Node) *ast.Node {
switch node.Kind {
case ast.KindStringLiteral, ast.KindNoSubstitutionTemplateLiteral, ast.KindNumericLiteral:
if node.Parent.Kind == ast.KindComputedPropertyName {
- if ast.IsObjectLiteralElement(node.Parent.Parent) {
+ if isObjectLiteralOrJsxElement(node.Parent.Parent) {
return node.Parent.Parent
}
return nil
}
fallthrough
case ast.KindIdentifier:
- if ast.IsObjectLiteralElement(node.Parent) && (node.Parent.Parent.Kind == ast.KindObjectLiteralExpression || node.Parent.Parent.Kind == ast.KindJsxAttributes) && node.Parent.Name() == node {
+ if isObjectLiteralOrJsxElement(node.Parent) && (node.Parent.Parent.Kind == ast.KindObjectLiteralExpression || node.Parent.Parent.Kind == ast.KindJsxAttributes) && node.Parent.Name() == node {
return node.Parent
}
}
return nil
}
+func isObjectLiteralOrJsxElement(node *ast.Node) bool {
+ return ast.IsObjectLiteralElement(node) || ast.IsJsxAttribute(node) || ast.IsJsxSpreadAttribute(node)
+}
+
// Return a function that returns true if the given node has not been seen
func nodeSeenTracker() func(*ast.Node) bool {
var seen collections.Set[*ast.Node]
diff --git a/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences10.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences10.baseline.jsonc
index 66169b1bef..ae62ad6be9 100644
--- a/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences10.baseline.jsonc
+++ b/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences10.baseline.jsonc
@@ -8,4 +8,13 @@
// }
// interface LinkProps extends ClickableProps {
// goTo: string;
-// // --- (line: 16) skipped ---
\ No newline at end of file
+// }
+// declare function MainButton(buttonProps: ButtonProps): JSX.Element;
+// declare function MainButton(linkProps: LinkProps): JSX.Element;
+// declare function MainButton(props: ButtonProps | LinkProps): JSX.Element;
+// let opt = ;
+// let opt = ;
+// let opt = {}} />;
+// let opt = {}} ignore-prop />;
+// let opt = ;
+// let opt = ;
\ No newline at end of file
diff --git a/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences2.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences2.baseline.jsonc
index fe81dcc1af..bbc44e1a5c 100644
--- a/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences2.baseline.jsonc
+++ b/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences2.baseline.jsonc
@@ -8,4 +8,6 @@
// isOpen?: boolean;
// };
// span: { n: string; };
-// // --- (line: 9) skipped ---
\ No newline at end of file
+// }
+// }
+// var x = ;
\ No newline at end of file
diff --git a/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences3.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences3.baseline.jsonc
index 8cfb85cc27..6512cb7d90 100644
--- a/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences3.baseline.jsonc
+++ b/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences3.baseline.jsonc
@@ -9,4 +9,4 @@
// }
//
//
-// var x = ;
\ No newline at end of file
+// var x = ;
\ No newline at end of file
diff --git a/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences7.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences7.baseline.jsonc
index ec6919e839..d0c6c2635a 100644
--- a/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences7.baseline.jsonc
+++ b/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences7.baseline.jsonc
@@ -8,4 +8,8 @@
// propString: string
// optional?: boolean
// }
-// // --- (line: 12) skipped ---
\ No newline at end of file
+// declare function Opt(attributes: OptionPropBag): JSX.Element;
+// let opt = ;
+// let opt1 = ;
+// let opt2 = ;
+// let opt3 = ;
\ No newline at end of file
diff --git a/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences9.baseline.jsonc b/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences9.baseline.jsonc
index 41f35bf02e..0f7118fa54 100644
--- a/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences9.baseline.jsonc
+++ b/testdata/baselines/reference/fourslash/findAllReferences/tsxFindAllReferences9.baseline.jsonc
@@ -8,4 +8,11 @@
// }
// declare function MainButton(buttonProps: ButtonProps): JSX.Element;
// declare function MainButton(linkProps: LinkProps): JSX.Element;
-// // --- (line: 19) skipped ---
\ No newline at end of file
+// declare function MainButton(props: ButtonProps | LinkProps): JSX.Element;
+// let opt = ;
+// let opt = ;
+// let opt = {}} />;
+// let opt = {}} ignore-prop />;
+// let opt = ;
+// let opt = ;
+// let opt = ;
\ No newline at end of file
diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename2.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename2.baseline.jsonc
index c9d4b07aa1..ecefa7fc1b 100644
--- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename2.baseline.jsonc
+++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename2.baseline.jsonc
@@ -8,13 +8,21 @@
// isOpen?: boolean;
// };
// span: { n: string; };
-// // --- (line: 9) skipped ---
+// }
+// }
+// var x = ;
// === findRenameLocations ===
// === /file.tsx ===
-// --- (line: 7) skipped ---
+// declare module JSX {
+// interface Element { }
+// interface IntrinsicElements {
+// div: {
+// [|nameRENAME|]?: string;
+// isOpen?: boolean;
+// };
// span: { n: string; };
// }
// }
diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename2.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename2.baseline.jsonc.diff
deleted file mode 100644
index b4ca831c75..0000000000
--- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename2.baseline.jsonc.diff
+++ /dev/null
@@ -1,26 +0,0 @@
---- old.tsxRename2.baseline.jsonc
-+++ new.tsxRename2.baseline.jsonc
-@@= skipped -7, +7 lines =@@
- // isOpen?: boolean;
- // };
- // span: { n: string; };
--// }
--// }
--// var x = ;
-+// // --- (line: 9) skipped ---
-
-
-
- // === findRenameLocations ===
- // === /file.tsx ===
--// declare module JSX {
--// interface Element { }
--// interface IntrinsicElements {
--// div: {
--// [|nameRENAME|]?: string;
--// isOpen?: boolean;
--// };
-+// --- (line: 7) skipped ---
- // span: { n: string; };
- // }
- // }
\ No newline at end of file
diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename3.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename3.baseline.jsonc
index a4963b39a6..6316fd23f1 100644
--- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename3.baseline.jsonc
+++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename3.baseline.jsonc
@@ -9,13 +9,18 @@
// }
//
//
-// var x = ;
+// var x = ;
// === findRenameLocations ===
// === /file.tsx ===
-// --- (line: 10) skipped ---
+// --- (line: 5) skipped ---
+// }
+// class MyClass {
+// props: {
+// [|nameRENAME|]?: string;
+// size?: number;
// }
//
//
diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename3.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename3.baseline.jsonc.diff
deleted file mode 100644
index 02c57a3f30..0000000000
--- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename3.baseline.jsonc.diff
+++ /dev/null
@@ -1,23 +0,0 @@
---- old.tsxRename3.baseline.jsonc
-+++ new.tsxRename3.baseline.jsonc
-@@= skipped -8, +8 lines =@@
- // }
- //
- //
--// var x = ;
-+// var x = ;
-
-
-
- // === findRenameLocations ===
- // === /file.tsx ===
--// --- (line: 5) skipped ---
--// }
--// class MyClass {
--// props: {
--// [|nameRENAME|]?: string;
--// size?: number;
-+// --- (line: 10) skipped ---
- // }
- //
- //
\ No newline at end of file
diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename7.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename7.baseline.jsonc
index 295648425f..950cb8ef4b 100644
--- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename7.baseline.jsonc
+++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename7.baseline.jsonc
@@ -8,27 +8,44 @@
// propString: string
// optional?: boolean
// }
-// // --- (line: 12) skipped ---
+// declare function Opt(attributes: OptionPropBag): JSX.Element;
+// let opt = ;
+// let opt1 = ;
+// let opt2 = ;
+// let opt3 = ;
// === findRenameLocations ===
// === /file.tsx ===
-// --- (line: 10) skipped ---
+// --- (line: 4) skipped ---
+// interface ElementAttributesProperty { props; }
+// }
+// interface OptionPropBag {
+// [|propxRENAME|]: number
+// propString: string
+// optional?: boolean
// }
// declare function Opt(attributes: OptionPropBag): JSX.Element;
// let opt = ;
// let opt1 = ;
-// let opt2 = ;
+// let opt2 = ;
// let opt3 = ;
// === findRenameLocations ===
// === /file.tsx ===
-// --- (line: 11) skipped ---
+// --- (line: 4) skipped ---
+// interface ElementAttributesProperty { props; }
+// }
+// interface OptionPropBag {
+// [|propxRENAME|]: number
+// propString: string
+// optional?: boolean
+// }
// declare function Opt(attributes: OptionPropBag): JSX.Element;
// let opt = ;
-// let opt1 = ;
+// let opt1 = ;
// let opt2 = ;
// let opt3 = ;
\ No newline at end of file
diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename7.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename7.baseline.jsonc.diff
deleted file mode 100644
index 7b8a814c5b..0000000000
--- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename7.baseline.jsonc.diff
+++ /dev/null
@@ -1,52 +0,0 @@
---- old.tsxRename7.baseline.jsonc
-+++ new.tsxRename7.baseline.jsonc
-@@= skipped -7, +7 lines =@@
- // propString: string
- // optional?: boolean
- // }
--// declare function Opt(attributes: OptionPropBag): JSX.Element;
--// let opt = ;
--// let opt1 = ;
--// let opt2 = ;
--// let opt3 = ;
-+// // --- (line: 12) skipped ---
-
-
-
- // === findRenameLocations ===
- // === /file.tsx ===
--// --- (line: 4) skipped ---
--// interface ElementAttributesProperty { props; }
--// }
--// interface OptionPropBag {
--// [|propxRENAME|]: number
--// propString: string
--// optional?: boolean
-+// --- (line: 10) skipped ---
- // }
- // declare function Opt(attributes: OptionPropBag): JSX.Element;
- // let opt = ;
- // let opt1 = ;
--// let opt2 = ;
-+// let opt2 = ;
- // let opt3 = ;
-
-
-
- // === findRenameLocations ===
- // === /file.tsx ===
--// --- (line: 4) skipped ---
--// interface ElementAttributesProperty { props; }
--// }
--// interface OptionPropBag {
--// [|propxRENAME|]: number
--// propString: string
--// optional?: boolean
--// }
-+// --- (line: 11) skipped ---
- // declare function Opt(attributes: OptionPropBag): JSX.Element;
- // let opt = ;
--// let opt1 = ;
-+// let opt1 = ;
- // let opt2 = ;
- // let opt3 = ;
\ No newline at end of file
diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename9.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename9.baseline.jsonc
index ee06cf2f9f..0e5e29ce6a 100644
--- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename9.baseline.jsonc
+++ b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename9.baseline.jsonc
@@ -8,18 +8,37 @@
// }
// interface LinkProps extends ClickableProps {
// goTo: string;
-// // --- (line: 16) skipped ---
+// }
+// declare function MainButton(buttonProps: ButtonProps): JSX.Element;
+// declare function MainButton(linkProps: LinkProps): JSX.Element;
+// declare function MainButton(props: ButtonProps | LinkProps): JSX.Element;
+// let opt = ;
+// let opt = ;
+// let opt = {}} />;
+// let opt = {}} ignore-prop />;
+// let opt = ;
+// let opt = ;
// === findRenameLocations ===
// === /file.tsx ===
-// --- (line: 18) skipped ---
+// --- (line: 8) skipped ---
+// className?: string;
+// }
+// interface ButtonProps extends ClickableProps {
+// [|onClickRENAME|](event?: React.MouseEvent): void;
+// }
+// interface LinkProps extends ClickableProps {
+// goTo: string;
+// }
+// declare function MainButton(buttonProps: ButtonProps): JSX.Element;
+// declare function MainButton(linkProps: LinkProps): JSX.Element;
// declare function MainButton(props: ButtonProps | LinkProps): JSX.Element;
// let opt = ;
// let opt = ;
// let opt = {}} />;
-// let opt = {}} ignore-prop />;
+// let opt = {}} ignore-prop />;
// let opt = ;
// let opt = ;
@@ -27,10 +46,21 @@
// === findRenameLocations ===
// === /file.tsx ===
-// --- (line: 19) skipped ---
+// --- (line: 8) skipped ---
+// className?: string;
+// }
+// interface ButtonProps extends ClickableProps {
+// [|onClickRENAME|](event?: React.MouseEvent): void;
+// }
+// interface LinkProps extends ClickableProps {
+// goTo: string;
+// }
+// declare function MainButton(buttonProps: ButtonProps): JSX.Element;
+// declare function MainButton(linkProps: LinkProps): JSX.Element;
+// declare function MainButton(props: ButtonProps | LinkProps): JSX.Element;
// let opt = ;
// let opt = ;
-// let opt = {}} />;
+// let opt = {}} />;
// let opt = {}} ignore-prop />;
// let opt = ;
// let opt = ;
@@ -47,13 +77,28 @@
// }
// declare function MainButton(buttonProps: ButtonProps): JSX.Element;
// declare function MainButton(linkProps: LinkProps): JSX.Element;
-// // --- (line: 19) skipped ---
+// declare function MainButton(props: ButtonProps | LinkProps): JSX.Element;
+// let opt = ;
+// let opt = ;
+// let opt = {}} />;
+// let opt = {}} ignore-prop />;
+// let opt = ;
+// let opt = ;
// === findRenameLocations ===
// === /file.tsx ===
-// --- (line: 20) skipped ---
+// --- (line: 11) skipped ---
+// onClick(event?: React.MouseEvent): void;
+// }
+// interface LinkProps extends ClickableProps {
+// [|goToRENAME|]: string;
+// }
+// declare function MainButton(buttonProps: ButtonProps): JSX.Element;
+// declare function MainButton(linkProps: LinkProps): JSX.Element;
+// declare function MainButton(props: ButtonProps | LinkProps): JSX.Element;
+// let opt = ;
// let opt = ;
// let opt = {}} />;
// let opt = {}} ignore-prop />;
diff --git a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename9.baseline.jsonc.diff b/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename9.baseline.jsonc.diff
deleted file mode 100644
index 40ae19c4bc..0000000000
--- a/testdata/baselines/reference/submodule/fourslash/findRenameLocations/tsxRename9.baseline.jsonc.diff
+++ /dev/null
@@ -1,98 +0,0 @@
---- old.tsxRename9.baseline.jsonc
-+++ new.tsxRename9.baseline.jsonc
-@@= skipped -7, +7 lines =@@
- // }
- // interface LinkProps extends ClickableProps {
- // goTo: string;
--// }
--// declare function MainButton(buttonProps: ButtonProps): JSX.Element;
--// declare function MainButton(linkProps: LinkProps): JSX.Element;
--// declare function MainButton(props: ButtonProps | LinkProps): JSX.Element;
--// let opt = ;
--// let opt = ;
--// let opt = {}} />;
--// let opt = {}} ignore-prop />;
--// let opt = ;
--// let opt = ;
-+// // --- (line: 16) skipped ---
-
-
-
- // === findRenameLocations ===
- // === /file.tsx ===
--// --- (line: 8) skipped ---
--// className?: string;
--// }
--// interface ButtonProps extends ClickableProps {
--// [|onClickRENAME|](event?: React.MouseEvent): void;
--// }
--// interface LinkProps extends ClickableProps {
--// goTo: string;
--// }
--// declare function MainButton(buttonProps: ButtonProps): JSX.Element;
--// declare function MainButton(linkProps: LinkProps): JSX.Element;
-+// --- (line: 18) skipped ---
- // declare function MainButton(props: ButtonProps | LinkProps): JSX.Element;
- // let opt = ;
- // let opt = ;
- // let opt = {}} />;
--// let opt = {}} ignore-prop />;
-+// let opt = {}} ignore-prop />;
- // let opt = ;
- // let opt = ;
-
-@@= skipped -38, +19 lines =@@
-
- // === findRenameLocations ===
- // === /file.tsx ===
--// --- (line: 8) skipped ---
--// className?: string;
--// }
--// interface ButtonProps extends ClickableProps {
--// [|onClickRENAME|](event?: React.MouseEvent): void;
--// }
--// interface LinkProps extends ClickableProps {
--// goTo: string;
--// }
--// declare function MainButton(buttonProps: ButtonProps): JSX.Element;
--// declare function MainButton(linkProps: LinkProps): JSX.Element;
--// declare function MainButton(props: ButtonProps | LinkProps): JSX.Element;
-+// --- (line: 19) skipped ---
- // let opt = ;
- // let opt = ;
--// let opt = {}} />;
-+// let opt = {}} />;
- // let opt = {}} ignore-prop />;
- // let opt = ;
- // let opt = ;
-@@= skipped -31, +20 lines =@@
- // }
- // declare function MainButton(buttonProps: ButtonProps): JSX.Element;
- // declare function MainButton(linkProps: LinkProps): JSX.Element;
--// declare function MainButton(props: ButtonProps | LinkProps): JSX.Element;
--// let opt = ;
--// let opt = ;
--// let opt = {}} />;
--// let opt = {}} ignore-prop />;
--// let opt = ;
--// let opt = ;
-+// // --- (line: 19) skipped ---
-
-
-
- // === findRenameLocations ===
- // === /file.tsx ===
--// --- (line: 11) skipped ---
--// onClick(event?: React.MouseEvent): void;
--// }
--// interface LinkProps extends ClickableProps {
--// [|goToRENAME|]: string;
--// }
--// declare function MainButton(buttonProps: ButtonProps): JSX.Element;
--// declare function MainButton(linkProps: LinkProps): JSX.Element;
--// declare function MainButton(props: ButtonProps | LinkProps): JSX.Element;
--// let opt = ;
-+// --- (line: 20) skipped ---
- // let opt = ;
- // let opt = {}} />;
- // let opt = {}} ignore-prop />;
\ No newline at end of file