From 4eca9f3549d6588bcebd68c7c6e59c444af7328b Mon Sep 17 00:00:00 2001 From: aamoghS Date: Thu, 25 Jun 2026 21:44:13 -0400 Subject: [PATCH 1/4] restore JSDoc member name check for private identifier references --- internal/ls/findallreferences.go | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/internal/ls/findallreferences.go b/internal/ls/findallreferences.go index 28043f859d..5bad10e111 100644 --- a/internal/ls/findallreferences.go +++ b/internal/ls/findallreferences.go @@ -348,10 +348,9 @@ func getRangeOfNode(node *ast.Node, sourceFile *ast.SourceFile, endNode *ast.Nod func isValidReferencePosition(node *ast.Node, searchSymbolName string) bool { switch node.Kind { case ast.KindPrivateIdentifier: - // !!! - // if (isJSDocMemberName(node.Parent)) { - // return true; - // } + if isJSDocMemberName(node.Parent) { + return true + } return len(node.Text()) == len(searchSymbolName) case ast.KindIdentifier: return len(node.Text()) == len(searchSymbolName) @@ -2652,3 +2651,16 @@ func (state *refState) explicitlyInheritsFrom(symbol *ast.Symbol, parent *ast.Sy state.inheritsFromCache[key] = inherits return inherits } + +func isJSDocMemberName(node *ast.Node) bool { + if node == nil { + return false + } + if node.Kind == ast.KindIdentifier || node.Kind == ast.KindPrivateIdentifier { + return true + } + if node.Kind == ast.KindPropertyAccessExpression { + return isJSDocMemberName(node.AsPropertyAccessExpression().Name) + } + return false +} From 1fec1708b4431e02bcea5aebc82a45923685e8f4 Mon Sep 17 00:00:00 2001 From: aamoghS Date: Thu, 25 Jun 2026 22:18:24 -0400 Subject: [PATCH 2/4] fix isJSDocMemberName parenthesis --- internal/ls/findallreferences.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/ls/findallreferences.go b/internal/ls/findallreferences.go index 5bad10e111..e31bf8a16c 100644 --- a/internal/ls/findallreferences.go +++ b/internal/ls/findallreferences.go @@ -2660,7 +2660,7 @@ func isJSDocMemberName(node *ast.Node) bool { return true } if node.Kind == ast.KindPropertyAccessExpression { - return isJSDocMemberName(node.AsPropertyAccessExpression().Name) + return isJSDocMemberName((*ast.Node)(node.AsPropertyAccessExpression().Name())) } return false } From 2b24ad4690b6f161dbfadf6b00c7e031d71b8d83 Mon Sep 17 00:00:00 2001 From: aamoghS Date: Thu, 25 Jun 2026 22:28:37 -0400 Subject: [PATCH 3/4] fix linter error: remove unnecessary cast --- internal/ls/findallreferences.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/ls/findallreferences.go b/internal/ls/findallreferences.go index e31bf8a16c..7744ceb23e 100644 --- a/internal/ls/findallreferences.go +++ b/internal/ls/findallreferences.go @@ -2660,7 +2660,7 @@ func isJSDocMemberName(node *ast.Node) bool { return true } if node.Kind == ast.KindPropertyAccessExpression { - return isJSDocMemberName((*ast.Node)(node.AsPropertyAccessExpression().Name())) + return isJSDocMemberName(node.AsPropertyAccessExpression().Name()) } return false } From 858ea9ed35166635c9fd8d784789a9cf874296fa Mon Sep 17 00:00:00 2001 From: aamoghS Date: Fri, 26 Jun 2026 00:40:22 -0400 Subject: [PATCH 4/4] add test for findAllReferences JSDoc private identifier --- ...llReferencesJSDocPrivateIdentifier_test.go | 26 +++++++++++++++++++ ...encesJSDocPrivateIdentifier.baseline.jsonc | 23 ++++++++++++++++ ...JSDocPrivateIdentifier.baseline.jsonc.diff | 26 +++++++++++++++++++ testdata/submoduleAccepted.txt | 1 + 4 files changed, 76 insertions(+) create mode 100644 internal/fourslash/tests/manual/findAllReferencesJSDocPrivateIdentifier_test.go create mode 100644 testdata/baselines/reference/submodule/fourslash/findAllReferences/findAllReferencesJSDocPrivateIdentifier.baseline.jsonc create mode 100644 testdata/baselines/reference/submoduleAccepted/fourslash/findAllReferences/findAllReferencesJSDocPrivateIdentifier.baseline.jsonc.diff diff --git a/internal/fourslash/tests/manual/findAllReferencesJSDocPrivateIdentifier_test.go b/internal/fourslash/tests/manual/findAllReferencesJSDocPrivateIdentifier_test.go new file mode 100644 index 0000000000..b169341d94 --- /dev/null +++ b/internal/fourslash/tests/manual/findAllReferencesJSDocPrivateIdentifier_test.go @@ -0,0 +1,26 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/typescript-go/internal/fourslash" + "github.com/microsoft/typescript-go/internal/testutil" +) + +func TestFindAllReferencesJSDocPrivateIdentifier(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = ` +class C { + /*1*/#field; + /** + * @see C./*2*/#field + */ + method() {} +} +` + f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content) + defer done() + + f.VerifyBaselineFindAllReferences(t, "1", "2") +} diff --git a/testdata/baselines/reference/submodule/fourslash/findAllReferences/findAllReferencesJSDocPrivateIdentifier.baseline.jsonc b/testdata/baselines/reference/submodule/fourslash/findAllReferences/findAllReferencesJSDocPrivateIdentifier.baseline.jsonc new file mode 100644 index 0000000000..df1a0be51b --- /dev/null +++ b/testdata/baselines/reference/submodule/fourslash/findAllReferences/findAllReferencesJSDocPrivateIdentifier.baseline.jsonc @@ -0,0 +1,23 @@ +// === findAllReferences === +// === /findAllReferencesJSDocPrivateIdentifier.ts === +// +// class C { +// /*FIND ALL REFS*/[|#field|]; +// /** +// * @see C.#field +// */ +// --- (line: 7) skipped --- + + + +// === findAllReferences === +// === /findAllReferencesJSDocPrivateIdentifier.ts === +// +// class C { +// #field; +// /** +// * @see C./*FIND ALL REFS*/#field +// */ +// method() {} +// } +// \ No newline at end of file diff --git a/testdata/baselines/reference/submoduleAccepted/fourslash/findAllReferences/findAllReferencesJSDocPrivateIdentifier.baseline.jsonc.diff b/testdata/baselines/reference/submoduleAccepted/fourslash/findAllReferences/findAllReferencesJSDocPrivateIdentifier.baseline.jsonc.diff new file mode 100644 index 0000000000..541f11fa5d --- /dev/null +++ b/testdata/baselines/reference/submoduleAccepted/fourslash/findAllReferences/findAllReferencesJSDocPrivateIdentifier.baseline.jsonc.diff @@ -0,0 +1,26 @@ +--- old.findAllReferencesJSDocPrivateIdentifier.baseline.jsonc ++++ new.findAllReferencesJSDocPrivateIdentifier.baseline.jsonc +@@= skipped --1, +0 lines =@@ ++// === findAllReferences === ++// === /findAllReferencesJSDocPrivateIdentifier.ts === ++// ++// class C { ++// /*FIND ALL REFS*/[|#field|]; ++// /** ++// * @see C.#field ++// */ ++// --- (line: 7) skipped --- ++ ++ ++ ++// === findAllReferences === ++// === /findAllReferencesJSDocPrivateIdentifier.ts === ++// ++// class C { ++// #field; ++// /** ++// * @see C./*FIND ALL REFS*/#field ++// */ ++// method() {} ++// } ++// \ No newline at end of file diff --git a/testdata/submoduleAccepted.txt b/testdata/submoduleAccepted.txt index b979f793aa..8e69a76ef8 100644 --- a/testdata/submoduleAccepted.txt +++ b/testdata/submoduleAccepted.txt @@ -1412,3 +1412,4 @@ conformance/callbackTagVariadicType.js.diff # definiteAssignment shorthand in object literal loses optional modifier ## https://github.com/microsoft/typescript-go/issues/3563 conformance/definiteAssignmentAssertionsWithObjectShortHand.js.diff +fourslash/findAllReferences/findAllReferencesJSDocPrivateIdentifier.baseline.jsonc.diff