Skip to content

Commit ccce6f7

Browse files
committed
feat: provide hover & definition for element values
1 parent 1815fa4 commit ccce6f7

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

src/definition/XmlClasslikeDefinitionProvider.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export class XmlClasslikeDefinitionProvider implements DefinitionProvider {
2222
position: Position,
2323
token: CancellationToken
2424
) {
25-
const range = document.getWordRangeAtPosition(position, /"[^"]*"/);
25+
const range = document.getWordRangeAtPosition(position, /("[^"]+")|(>[^<]+<)/);
2626

2727
if (!range) {
2828
return null;
@@ -36,7 +36,7 @@ export class XmlClasslikeDefinitionProvider implements DefinitionProvider {
3636
return null;
3737
}
3838

39-
const potentialNamespace = word.replace(/"/g, '');
39+
const potentialNamespace = word.replace(/["<>]/g, '');
4040

4141
const classUri = await namespaceIndexData.findClassByNamespace(
4242
PhpNamespace.fromString(potentialNamespace)
@@ -48,11 +48,16 @@ export class XmlClasslikeDefinitionProvider implements DefinitionProvider {
4848

4949
const targetPosition = await this.getClasslikeNameRange(document, classUri);
5050

51+
const originSelectionRange = new Range(
52+
range.start.with({ character: range.start.character + 1 }),
53+
range.end.with({ character: range.end.character - 1 })
54+
);
55+
5156
return [
5257
{
5358
targetUri: classUri,
5459
targetRange: targetPosition,
55-
originSelectionRange: range,
60+
originSelectionRange,
5661
} as LocationLink,
5762
];
5863
}

src/hover/XmlClasslikeHoverProvider.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ import PhpNamespace from 'common/PhpNamespace';
44
import { AutoloadNamespaceIndexData } from 'indexer/autoload-namespace/AutoloadNamespaceIndexData';
55
import AutoloadNamespaceIndexer from 'indexer/autoload-namespace/AutoloadNamespaceIndexer';
66
import IndexManager from 'indexer/IndexManager';
7-
import { Hover, HoverProvider, Position, TextDocument } from 'vscode';
7+
import { Hover, HoverProvider, Position, Range, TextDocument } from 'vscode';
88

99
export default class XmlClasslikeHoverProvider implements HoverProvider {
1010
private namespaceIndexData: AutoloadNamespaceIndexData | undefined;
1111

1212
public async provideHover(document: TextDocument, position: Position): Promise<Hover | null> {
13-
const range = document.getWordRangeAtPosition(position, /"[^"]*"/);
13+
const range = document.getWordRangeAtPosition(position, /("[^"]+")|(>[^<]+<)/);
1414

1515
if (!range) {
1616
return null;
@@ -24,7 +24,7 @@ export default class XmlClasslikeHoverProvider implements HoverProvider {
2424
return null;
2525
}
2626

27-
const potentialNamespace = word.replace(/"/g, '');
27+
const potentialNamespace = word.replace(/["<>]/g, '');
2828

2929
const classUri = await namespaceIndexData.findClassByNamespace(
3030
PhpNamespace.fromString(potentialNamespace)
@@ -37,7 +37,12 @@ export default class XmlClasslikeHoverProvider implements HoverProvider {
3737
const phpFile = await PhpDocumentParser.parseUri(document, classUri);
3838
const classLikeInfo = new ClasslikeInfo(phpFile);
3939

40-
return new Hover(classLikeInfo.getHover(), range);
40+
const rangeWithoutTags = new Range(
41+
range.start.with({ character: range.start.character + 1 }),
42+
range.end.with({ character: range.end.character - 1 })
43+
);
44+
45+
return new Hover(classLikeInfo.getHover(), rangeWithoutTags);
4146
}
4247

4348
private getNamespaceIndexData(): AutoloadNamespaceIndexData | undefined {

0 commit comments

Comments
 (0)