Skip to content

Commit a0d98ab

Browse files
committed
go to macrodefinition in the same file, fixes #25
1 parent 2ebb328 commit a0d98ab

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

providers/ObjectScriptDefinitionProvider.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as vscode from 'vscode';
22
import { DocumentContentProvider } from './DocumentContentProvider';
33
import { AtelierAPI } from '../api';
44
import { ClassDefinition } from '../utils/classDefinition';
5-
import { currentFile } from '../utils';
5+
import { currentFile, CurrentFile } from '../utils';
66

77
export class ObjectScriptDefinitionProvider implements vscode.DefinitionProvider {
88
provideDefinition(
@@ -39,9 +39,8 @@ export class ObjectScriptDefinitionProvider implements vscode.DefinitionProvider
3939
let macroText = macroRange ? document.getText(macroRange) : '';
4040
let macroMatch = macroText.match(/^\${3}(\b\w+\b)$/);
4141
if (macroMatch) {
42-
let fileName = currentFile().name;
4342
let [, macro] = macroMatch;
44-
return this.macro(fileName, macro).then(data =>
43+
return this.macro(currentFile(), macro).then(data =>
4544
data && data.document.length
4645
? new vscode.Location(DocumentContentProvider.getUri(data.document), new vscode.Position(data.line, 0))
4746
: null
@@ -200,13 +199,21 @@ export class ObjectScriptDefinitionProvider implements vscode.DefinitionProvider
200199
};
201200
}
202201

203-
async macro(fileName: string, macro: string): Promise<{ document: string; line: number }> {
202+
async macro(file: CurrentFile, macro: string): Promise<{ document: string; line: number }> {
203+
let fileName = file.name;
204204
const api = new AtelierAPI();
205205
let includes = [];
206206
if (fileName.toLowerCase().endsWith('cls')) {
207207
let classDefinition = new ClassDefinition(fileName);
208208
includes = await classDefinition.includeCode();
209209
}
210+
let tmpContent = file.content.replace(/\r/, '');
211+
let match = tmpContent.match(new RegExp(`^[\\t ]*#def(?:ine|1arg) \\b${macro}\\b`, 'm'));
212+
if (match) {
213+
let line = tmpContent.substr(0, match.index).split('\n').length - 1;
214+
return Promise.resolve({ document: fileName, line });
215+
}
216+
210217
return api.getmacrolocation(fileName, macro, includes).then(data => data.result.content);
211218
}
212219
}

0 commit comments

Comments
 (0)