From 48b91ef38c5da7cc90c99c76a31d94eb95e72528 Mon Sep 17 00:00:00 2001 From: johnsoncodehk Date: Wed, 12 Oct 2022 04:06:19 +0800 Subject: [PATCH] fix: references codeLens number incorrect close #1989 --- .../src/plugins/vue-codelens-references.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/vue-language-tools/vue-language-service/src/plugins/vue-codelens-references.ts b/vue-language-tools/vue-language-service/src/plugins/vue-codelens-references.ts index ff099f789..a6d79dbe6 100644 --- a/vue-language-tools/vue-language-service/src/plugins/vue-codelens-references.ts +++ b/vue-language-tools/vue-language-service/src/plugins/vue-codelens-references.ts @@ -1,5 +1,6 @@ import * as vscode from 'vscode-languageserver-protocol'; import { LanguageServicePlugin, LanguageServicePluginContext, SourceFileDocument } from '@volar/language-service'; +import { VueSourceFile } from '@volar/vue-language-core'; const showReferencesCommand = 'volar.show-references'; @@ -68,12 +69,21 @@ export default function (options: { if (!vueDocument) return codeLens; - const sourceMaps = vueDocument.getSourceMaps(); - const currentSourceMap = sourceMaps.find(sourceMap => sourceMap.toGeneratedPosition(data.position)); + const document = vueDocument.getDocument(); + const offset = document.offsetAt(data.position); + const file = vueDocument.file as VueSourceFile; + const blocks = [ + file.sfc.script, + file.sfc.scriptSetup, + file.sfc.template, + ...file.sfc.styles, + ...file.sfc.customBlocks, + ]; const references = await options.findReference(data.uri, data.position) ?? []; + const sourceBlock = blocks.find(block => block && offset >= block.startTagEnd && offset <= block.endTagStart); const referencesInDifferentDocument = references.filter(reference => reference.uri !== data.uri // different file - || sourceMaps.some(sourceMap => sourceMap.toGeneratedPosition(reference.range.start) && sourceMap !== currentSourceMap) // different embedded document + || sourceBlock !== blocks.find(block => block && document.offsetAt(reference.range.start) >= block.startTagEnd && document.offsetAt(reference.range.end) <= block.endTagStart) // different block ); const referencesCount = referencesInDifferentDocument.length ?? 0;