Skip to content

Commit

Permalink
Merge pull request #50 from Aristidescosta/formatador-potigol
Browse files Browse the repository at this point in the history
Formatador potigol
  • Loading branch information
samuelrvg authored Feb 25, 2024
2 parents 47eff1e + 4c9e7d1 commit 4c53c32
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 1 deletion.
9 changes: 8 additions & 1 deletion fontes/extensao.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import { DeleguaProvedorAssinaturaMetodos } from './assinaturas-metodos';
import { LmhtProvedorCompletude } from './completude/lmht-provedor-completude';
import { LmhtProvedorDocumentacaoEmEditor } from './documentacao-em-editor/lmht-provedor-documentacao-em-editor';
import { tentarFecharTagLmht } from './linguagens/lmht/fechamento-estruturas';
import { PotigolProvedorFormatacao } from './formatadores/potigol-provedor-formatacao';

/**
* Em teoria runMode é uma "compile time flag", mas nunca foi usado aqui desta forma.
Expand Down Expand Up @@ -158,7 +159,13 @@ export function activate(context: vscode.ExtensionContext) {
new VisualgProvedorFormatacao()
)
);


context.subscriptions.push(
vscode.languages.registerDocumentFormattingEditProvider(
'potigol',
new PotigolProvedorFormatacao()
)
);
// IntelliSense para Delégua e Liquido.
context.subscriptions.push(
vscode.languages.registerCompletionItemProvider(
Expand Down
34 changes: 34 additions & 0 deletions fontes/formatadores/potigol-provedor-formatacao.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import * as vscode from 'vscode';
import * as sistemaOperacional from 'node:os';


import { FormatadorPotigol } from '@designliquido/delegua/formatadores';
import { LexadorPotigol } from '@designliquido/delegua/lexador/dialetos';
import { AvaliadorSintaticoPotigol } from '@designliquido/delegua/avaliador-sintatico/dialetos';

export class PotigolProvedorFormatacao implements vscode.DocumentFormattingEditProvider {
provideDocumentFormattingEdits(document: vscode.TextDocument, options: vscode.FormattingOptions, token: vscode.CancellationToken): vscode.ProviderResult<vscode.TextEdit[]> {
const lexador = new LexadorPotigol();
const avaliadorSintatico = new AvaliadorSintaticoPotigol();
const formatador = new FormatadorPotigol(sistemaOperacional.EOL);

const resultadoLexador = lexador.mapear(document.getText().split('\n'), -1);
const resultadoAvaliacaoSintatica = avaliadorSintatico.analisar(resultadoLexador, -1);
let codigoFormatado: string = document.getText();
try {
codigoFormatado = formatador.formatar(resultadoAvaliacaoSintatica.declaracoes);
} catch (erro) {
console.error(erro);
}

return [
vscode.TextEdit.replace(
new vscode.Range(
document.lineAt(0).range.start,
document.lineAt(document.lineCount - 1).range.end
),
codigoFormatado
),
];
}
}

0 comments on commit 4c53c32

Please sign in to comment.