Skip to content
Draft
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions src/bscPlugin/definition/DefinitionProvider.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -194,4 +194,56 @@ describe('DefinitionProvider', () => {
range: util.createRange(1, 0, 1, 0)
}]);
});

it('handles script tag uri go-to-definition', () => {
const brsFile = program.setFile('components/MainScene.brs', `
sub main()
end sub
`);
const xmlFile = program.setFile('components/MainScene.xml', `
<component name="MainScene" extends="Scene">
<script type="text/brightscript" uri="pkg:/components/MainScene.brs" />
</component>
`);
// Line 2 (0-indexed): ` <script type="text/brightscript" uri="pkg:/components/MainScene.brs" />`
// The uri value range starts at the opening `"` for `pkg:/components/MainScene.brs`
expect(
program.getDefinition(xmlFile.srcPath, util.createPosition(2, 60))
).to.eql([{
uri: URI.file(brsFile.srcPath).toString(),
range: util.createRange(0, 0, 0, 0)
}]);
});

it('handles script tag uri go-to-definition with relative path', () => {
const brsFile = program.setFile('components/MainScene.brs', `
sub main()
end sub
`);
const xmlFile = program.setFile('components/MainScene.xml', `
<component name="MainScene" extends="Scene">
<script type="text/brightscript" uri="MainScene.brs" />
</component>
`);
// Line 2 (0-indexed): ` <script type="text/brightscript" uri="MainScene.brs" />`
// The uri value range starts at the opening `"` for `MainScene.brs`
expect(
program.getDefinition(xmlFile.srcPath, util.createPosition(2, 54))
).to.eql([{
uri: URI.file(brsFile.srcPath).toString(),
range: util.createRange(0, 0, 0, 0)
}]);
});

it('returns empty array when script tag uri file is not found', () => {
const xmlFile = program.setFile('components/MainScene.xml', `
<component name="MainScene" extends="Scene">
<script type="text/brightscript" uri="pkg:/components/NotFound.brs" />
</component>
`);
// click within "pkg:/components/NotFound.brs" uri value
expect(
program.getDefinition(xmlFile.srcPath, util.createPosition(2, 60))
).to.eql([]);
});
});
14 changes: 14 additions & 0 deletions src/bscPlugin/definition/DefinitionProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -258,5 +258,19 @@ export class DefinitionProvider {
uri: util.pathToUri(file.parentComponent.srcPath)
});
}

//if the position is within a script tag's uri attribute
for (const scriptImport of file.scriptTagImports) {
if (scriptImport.filePathRange && util.rangeContains(scriptImport.filePathRange, this.event.position)) {
const scriptFile = this.event.program.getFile(scriptImport.pkgPath);
if (scriptFile) {
this.event.definitions.push({
range: util.createRange(0, 0, 0, 0),
uri: util.pathToUri(scriptFile.srcPath)
});
}
break;
}
}
}
}
Loading