Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
26 changes: 13 additions & 13 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"url": "https://github.com/AlencarGabriel/ProtheusDoc-VsCode/issues"
},
"engines": {
"vscode": "^1.52.0"
"vscode": "^1.71.0"
},
"categories": [
"Other",
Expand Down Expand Up @@ -299,20 +299,20 @@
"test": "node ./out/test/runTest.js"
},
"devDependencies": {
"@types/glob": "^7.1.3",
"@types/mocha": "^5.2.7",
"@types/node": "^12.19.15",
"@types/semver": "^7.3.4",
"@types/vscode": "^1.52.0",
"glob": "^7.1.5",
"mocha": "^6.2.3",
"tslint": "^5.20.0",
"typescript": "^3.9.7",
"vscode-test": "^1.4.1"
"@types/glob": "^8.0.0",
"@types/mocha": "^9.1.1",
"@types/node": "^18.7.15",
"@types/semver": "^7.3.12",
"@types/vscode": "^1.71.0",
"glob": "^8.0.3",
"mocha": "^10.0.0",
"tslint": "^6.1.3",
"typescript": "^4.8.2",
"vscode-test": "^1.6.1"
},
"dependencies": {
"opn": "^6.0.0",
"protheusdoc-html": "^1.1.4",
"semver": "^7.3.4"
"protheusdoc-html": "^1.1.6",
"semver": "^7.3.7"
}
}
113 changes: 58 additions & 55 deletions src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,64 +36,67 @@ export function activate(context: vscode.ExtensionContext) {
context.subscriptions.push(addGenerateHTMLFilesOpened());
context.subscriptions.push(addGenerateHTMLFile());

vscode.languages.registerHoverProvider(ELanguageSupport.advpl, {
provideHover(document: vscode.TextDocument, position: vscode.Position, _token: vscode.CancellationToken) {
let symbol = document.getText(document.getWordRangeAtPosition(position));
let _docs = new Array<vscode.MarkdownString>();

// Tratamento para User Functions
// tslint:disable-next-line: curly
if (symbol.toUpperCase().startsWith("U_"))
symbol = symbol.substr(2);

// Filtra a ocorrência do Hover na tabela de documentações
let documentation = documentations.filter(doc => doc.identifier.trim().toUpperCase() === symbol.trim().toUpperCase());

if (documentation) {

// Verifica se existe documentação do identificador no arquivo atual (Static Function/Method)
let docInFile = documentation.filter(doc => doc.file.fsPath === document.uri.fsPath);

// Se a documentação estiver definida no fonte posicionado, retorna somente do fonte atual
if (docInFile.length > 0) {
docInFile.forEach(doc => { _docs.push(doc.getHover()); });
} else {
// Se a documentação não estiver definida no fonte atual, lista todas as ocorrências caso exista
documentation.forEach(doc => { _docs.push(doc.getHover()); });
const tdsVscode: vscode.Extension<any> | undefined = vscode.extensions.getExtension("TOTVS.tds-vscode");
if (tdsVscode?.packageJSON["version"] < "1.4.0") {
context.subscriptions.push(
vscode.languages.registerHoverProvider(ELanguageSupport.advpl, {
provideHover(document: vscode.TextDocument, position: vscode.Position, _token: vscode.CancellationToken) {
let symbol = document.getText(document.getWordRangeAtPosition(position));
let _docs = new Array<vscode.MarkdownString>();

// Tratamento para User Functions
// tslint:disable-next-line: curly
if (symbol.toUpperCase().startsWith("U_"))
symbol = symbol.substr(2);

// Filtra a ocorrência do Hover na tabela de documentações
let documentation = documentations.filter(doc => doc.identifier.trim().toUpperCase() === symbol.trim().toUpperCase());

if (documentation) {

// Verifica se existe documentação do identificador no arquivo atual (Static Function/Method)
let docInFile = documentation.filter(doc => doc.file.fsPath === document.uri.fsPath);

// Se a documentação estiver definida no fonte posicionado, retorna somente do fonte atual
if (docInFile.length > 0) {
docInFile.forEach(doc => { _docs.push(doc.getHover()); });
} else {
// Se a documentação não estiver definida no fonte atual, lista todas as ocorrências caso exista
documentation.forEach(doc => { _docs.push(doc.getHover()); });
}
}

return new vscode.Hover(_docs);
}

return new vscode.Hover(_docs);
}
});

context.subscriptions.push(vscode.languages.registerCompletionItemProvider(
[ELanguageSupport.advpl],
{
provideCompletionItems: (document: vscode.TextDocument, position: vscode.Position, _token: vscode.CancellationToken) => {
// const line = document.lineAt(position.line).text;
// const prefix = line.slice(0, position.character);
const util = new Utils;
let list = new vscode.CompletionList();

// Adiciona o Completion "Add ProtheusDoc Block"
list.items.push(new CompletionAddBlock(document, position));
list.items.push(new CompletionAuthor(position));
list.items.push(new CompletionHistory(position));
list.items.push(new CompletionVersion(position));

// Adiciona o Completion de todas as palavras encontradas no Documento
// Verifica se o usuário deseja utilizar a sugestão de texto customizada da extensão no IntelliSense.
if (util.getUseSuggestCustom()) {
// Obs.: Necessário fazer assim pois o uso de Completion Provider faz
// com que o VsCode pare de mostrar os itens de texto no IntelliSense.
_wordsDocument.map(word => list.items.push(new vscode.CompletionItem(word, vscode.CompletionItemKind.Text)));
}),
vscode.languages.registerCompletionItemProvider(
[ELanguageSupport.advpl],
{
provideCompletionItems: (document: vscode.TextDocument, position: vscode.Position, _token: vscode.CancellationToken) => {
// const line = document.lineAt(position.line).text;
// const prefix = line.slice(0, position.character);
const util = new Utils;
let list = new vscode.CompletionList();

// Adiciona o Completion "Add ProtheusDoc Block"
list.items.push(new CompletionAddBlock(document, position));
list.items.push(new CompletionAuthor(position));
list.items.push(new CompletionHistory(position));
list.items.push(new CompletionVersion(position));

// Adiciona o Completion de todas as palavras encontradas no Documento
// Verifica se o usuário deseja utilizar a sugestão de texto customizada da extensão no IntelliSense.
if (util.getUseSuggestCustom()) {
// Obs.: Necessário fazer assim pois o uso de Completion Provider faz
// com que o VsCode pare de mostrar os itens de texto no IntelliSense.
_wordsDocument.map(word => list.items.push(new vscode.CompletionItem(word, vscode.CompletionItemKind.Text)));
}

return list;
}

return list;
}
})
);
})
);
}

vscode.window.onDidChangeActiveTextEditor(editor => {

Expand Down
2 changes: 1 addition & 1 deletion src/objects/Utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ export class Utils {
return authorDefault.trim();
}
else {
return os.userInfo({ encoding: this.getEncoding() }).username;
return os.userInfo().username;
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/test/suite/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ export function run(): Promise<void> {
// Create the mocha test
const mocha = new Mocha({
ui: 'tdd',
color: true
});
mocha.useColors(true);

const testsRoot = path.resolve(__dirname, '..');

Expand Down