Skip to content

Commit

Permalink
Add fdf destination function and refactor others.
Browse files Browse the repository at this point in the history
  • Loading branch information
WalonLi committed Sep 9, 2019
1 parent 626c4c3 commit 760b7fe
Show file tree
Hide file tree
Showing 7 changed files with 50 additions and 28 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"Other"
],
"activationEvents": [
"onLanguage:edk2_fdf",
"onLanguage:edk2_dsc",
"onLanguage:edk2_dec",
"onLanguage:edk2_inf"
Expand Down
67 changes: 44 additions & 23 deletions src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,49 @@
import * as vscode from 'vscode';
import * as fs from 'fs';


class Edk2FdfProvider implements vscode.DefinitionProvider {
provideDefinition(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): vscode.ProviderResult<vscode.Definition> {
let dest = document.lineAt(position).text.replace(/#.*/g, '') // comments
.replace(/^\s*/g, '') // front blank
.replace(/[\s]*$/g, ''); // tail blank
// Check INF prefix
if (dest.match(/^INF[a-zA-Z0-9\s]+/g)) {
if (vscode.workspace.workspaceFolders) {
dest = vscode.workspace.workspaceFolders[0].uri.fsPath + '/' + dest.replace(/^INF[\s]+/g, '');
console.log(dest);
if (fs.existsSync(dest)) {
return new vscode.Location(vscode.Uri.file(dest), new vscode.Position(0, 0));
}
}
}
}
}

class Edk2DscProvider implements vscode.DefinitionProvider {
provideDefinition(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): vscode.ProviderResult<vscode.Definition> {
/*
console.log('fileName: ' + document.uri.fsPath);
console.log('workDir: ' + path.dirname(document.uri.fsPath),);
console.log('word: ' + document.getText(document.getWordRangeAtPosition(position)));
console.log('line: ' + document.lineAt(position).text);
console.log(vscode.workspace.rootPath);
*/
let dest = document.lineAt(position).text.replace(new RegExp(/^\s*/g), '')
.replace(new RegExp(/[\s\{\}]*$/g), '')
.replace(new RegExp(/[a-zA-Z0-9\s]+\|/g), '');
dest = vscode.workspace.rootPath + '/' + dest;
if (fs.existsSync(dest)) {
return new vscode.Location(vscode.Uri.file(dest), new vscode.Position(0, 0));


let dest = document.lineAt(position).text.replace(/#.*/g, '') // comments
.replace(/^\s*/g, '') // front blank
.replace(/[\s\{\}]*$/g, '') // tail "{", "}"" and blank
.replace(/[a-zA-Z0-9\s]+\|/g, ''); // front "|" and blank
if (vscode.workspace.workspaceFolders) {
dest = vscode.workspace.workspaceFolders[0].uri.fsPath + '/' + dest;
if (fs.existsSync(dest)) {
return new vscode.Location(vscode.Uri.file(dest), new vscode.Position(0, 0));
}
}
}
}

class Edk2DecProvider implements vscode.DefinitionProvider {
provideDefinition(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): vscode.ProviderResult<vscode.Definition> {
// check destination file.
let dest = document.lineAt(position).text.replace(new RegExp(/^\s*/g), '')
.replace(new RegExp(/[\s\{\}]*$/g), '')
.replace(new RegExp(/[a-zA-Z0-9\s]+\|/g), '');
let dest = document.lineAt(position).text.replace(/#.*/g, '') // comments
.replace(/^\s*/g, '') // front blank
.replace(/[\s\{\}]*$/g, '') // tail "{", "}"" and blank
.replace(/[a-zA-Z0-9\s]+\|/g, ''); // front "|" and blank
if (!dest.substring(dest.length-2).match('.h')) {
return;
}
Expand Down Expand Up @@ -66,18 +84,20 @@ class Edk2DecProvider implements vscode.DefinitionProvider {
class Edk2InfProvider implements vscode.DefinitionProvider {
provideDefinition(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): vscode.ProviderResult<vscode.Definition> {
// check destination file.
let dest = document.lineAt(position).text.replace(new RegExp(/^\s*/g), '')
.replace(new RegExp(/#.*/g), '')
.replace(new RegExp(/[\s]*$/g), '');
let dest = document.lineAt(position).text.replace(/#.*/g, '') // comments
.replace(/^\s*/g, '') // front blank
.replace(/[\s]*$/g, ''); // tail blank

// console.log(dest);
if (dest.match(/[a-zA-Z0-9\s]+\.[a-zA-Z0-9\s]+/g)) {
let file_extension = dest.replace(/^[a-zA-Z0-9\s\/]+/g, '');
// console.log('extension ' + file_extension);
if (file_extension.match('.dec')) {
let root_path = vscode.workspace.rootPath + '/';
if (fs.existsSync(root_path+dest)) {
return new vscode.Location(vscode.Uri.file(root_path+dest), new vscode.Position(0, 0));
if (vscode.workspace.workspaceFolders) {
let root_path = vscode.workspace.workspaceFolders[0].uri.fsPath + '/';
if (fs.existsSync(root_path+dest)) {
return new vscode.Location(vscode.Uri.file(root_path+dest), new vscode.Position(0, 0));
}
}
} else {
let parent_path = document.uri.fsPath.replace(/[a-zA-Z0-9.]*$/g, '');
Expand All @@ -90,7 +110,7 @@ class Edk2InfProvider implements vscode.DefinitionProvider {
let table = dest.replace(/\s/g, '').split('=');

// console.log(table);
// TO-DO: Jump to C file.
// TO-DO: Jump to C entry point.
}
}
}
Expand All @@ -116,6 +136,7 @@ export function activate(context: vscode.ExtensionContext) {
context.subscriptions.push(disposable);
*/
vscode.languages.registerDefinitionProvider({scheme: 'file', language: 'edk2_fdf'}, new Edk2FdfProvider());
vscode.languages.registerDefinitionProvider({scheme: 'file', language: 'edk2_dsc'}, new Edk2DscProvider());
vscode.languages.registerDefinitionProvider({scheme: 'file', language: 'edk2_dec'}, new Edk2DecProvider());
vscode.languages.registerDefinitionProvider({scheme: 'file', language: 'edk2_inf'}, new Edk2InfProvider());
Expand Down
2 changes: 1 addition & 1 deletion syntaxes/edk2_dec.tmLanguage.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
},
{
"name": "variable.parameter.edk2_dec",
"match": "[a-zA-Z0-9/]+.h$"
"match": "[a-zA-Z0-9_/]+.h"
},
{
"name": "keyword.control.edk2_dec",
Expand Down
2 changes: 1 addition & 1 deletion syntaxes/edk2_dsc.tmLanguage.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
},
{
"name": "variable.parameter.edk2_dsc",
"match": "[a-zA-Z0-9/]+.inf$"
"match": "[a-zA-Z0-9_/]+.inf"
},
{
"name": "keyword.control.edk2_dsc",
Expand Down
2 changes: 1 addition & 1 deletion syntaxes/edk2_fdf.tmLanguage.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
},
{
"name": "variable.parameter.edk2_fdf",
"match": "[a-zA-Z0-9/]+\\.[a-zA-Z]+$"
"match": "[a-zA-Z0-9_/]+\\.[a-zA-Z]+"
},
{
"name": "keyword.control.edk2_fdf",
Expand Down
2 changes: 1 addition & 1 deletion syntaxes/edk2_inf.tmLanguage.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
},
{
"name": "variable.parameter.edk2_inf",
"match": "[a-zA-Z0-9/]+\\.[a-zA-Z]+$"
"match": "[a-zA-Z0-9_/]+\\.[a-zA-Z]+"
},
{
"name": "keyword.control.edk2_inf",
Expand Down
2 changes: 1 addition & 1 deletion syntaxes/edk2_vfr.tmLanguage.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
},
{
"name": "variable.parameter.edk2_vfr",
"match": "[a-zA-Z0-9/]+\\.[a-zA-Z]+$"
"match": "[a-zA-Z0-9_/]+\\.[a-zA-Z]+"
},
{
"name": "constant.numeric.edk2_vfr",
Expand Down

0 comments on commit 760b7fe

Please sign in to comment.