Skip to content

Commit 5d29c34

Browse files
committed
addressed Issue #17
added logic to look at the previous char to see if symbol is a variable did some extra regex to filter out variables that don't match
1 parent f2d0e58 commit 5d29c34

File tree

1 file changed

+32
-13
lines changed

1 file changed

+32
-13
lines changed

yara/src/extension.ts

+32-13
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,41 @@ export class YaraDefinitionProvider implements vscode.DefinitionProvider {
3939
export class YaraReferenceProvider implements vscode.ReferenceProvider {
4040
public provideReferences(doc: vscode.TextDocument, pos: vscode.Position, options: { includeDeclaration: boolean }, token: vscode.CancellationToken): Thenable<vscode.Location[]> {
4141
return new Promise((resolve, reject) => {
42-
let references: vscode.Location[] = new Array<vscode.Location>();
42+
const varFirstChar = new Set(["$", "#", "@", "!"]);
4343
const fileUri: vscode.Uri = vscode.Uri.file(doc.fileName);
4444
const range: vscode.Range = doc.getWordRangeAtPosition(pos);
45-
const symbol: string = doc.getText(range);
46-
// console.log(`Providing references for symbol '${symbol}'`);
4745
let lines: string[] = doc.getText().split("\n");
48-
let lineNo = 0;
49-
lines.forEach(line => {
50-
let character: number = line.indexOf(symbol);
51-
if (character != -1) {
52-
// console.log(`Found ${symbol} on line ${lineNo} at character ${character}`);
53-
let refPosition: vscode.Position = new vscode.Position(lineNo, character);
54-
references.push(new vscode.Location(fileUri, refPosition));
55-
}
56-
lineNo++;
57-
});
46+
let references: vscode.Location[] = new Array<vscode.Location>();
47+
let symbol: string = doc.getText(range);
48+
// console.log(`Providing references for symbol '${symbol}'`);
49+
let possibleVarStart: vscode.Position = new vscode.Position(range.start.line, range.start.character-1);
50+
let possibleVarRange: vscode.Range = new vscode.Range(possibleVarStart, range.end);
51+
let possibleVar: string = doc.getText(possibleVarRange);
52+
if (varFirstChar.has(possibleVar.charAt(0))) {
53+
// console.log(`Identified symbol as a variable: ${symbol}`);
54+
let lineNo = 0;
55+
lines.forEach(line => {
56+
let character: number = line.search(`[\$#@!]${symbol}[^a-zA-Z0-9_]`);
57+
if (character != -1) {
58+
// console.log(`Found ${symbol} on line ${lineNo} at character ${character}`);
59+
let refPosition: vscode.Position = new vscode.Position(lineNo, character);
60+
references.push(new vscode.Location(fileUri, refPosition));
61+
}
62+
lineNo++;
63+
});
64+
}
65+
else {
66+
let lineNo = 0;
67+
lines.forEach(line => {
68+
let character: number = line.indexOf(symbol);
69+
if (character != -1) {
70+
// console.log(`Found ${symbol} on line ${lineNo} at character ${character}`);
71+
let refPosition: vscode.Position = new vscode.Position(lineNo, character);
72+
references.push(new vscode.Location(fileUri, refPosition));
73+
}
74+
lineNo++;
75+
});
76+
}
5877
if (references != null) {
5978
resolve(references);
6079
}

0 commit comments

Comments
 (0)