liquido
Version:
Conjunto de ferramentas para desenvolvimento de aplicações para a internet 100% em português
69 lines • 4.14 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AvaliadorSintaticoLiquidoPitugues = void 0;
const avaliador_sintatico_pitugues_com_importacao_1 = require("@designliquido/delegua-node/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues-com-importacao");
const delegua_1 = require("@designliquido/delegua");
const informacao_elemento_sintatico_1 = require("@designliquido/delegua/informacao-elemento-sintatico");
const pitugues_1 = __importDefault(require("@designliquido/delegua/tipos-de-simbolos/pitugues"));
class AvaliadorSintaticoLiquidoPitugues extends avaliador_sintatico_pitugues_com_importacao_1.AvaliadorSintaticoPituguesComImportacao {
constructor(importador) {
super(importador);
this.tiposDeFerramentasExternas = {};
}
// O método inicializarPilhaEscopos() do analisador Pitugues não processa
// tiposDeFerramentasExternas (apenas a classe base não-Pitugues faz).
// Substituímos aqui para registrar as variáveis built-in do Liquido (liquido,
// requisicao, resposta, lincones, contexto) para que o analisador não sinalize
// como indefinidas durante a análise dos arquivos de rota.
inicializarPilhaEscopos() {
super.inicializarPilhaEscopos();
for (const tipos of Object.values(this.tiposDeFerramentasExternas)) {
for (const [nomeTipo, tipo] of Object.entries(tipos)) {
if (!nomeTipo || !tipo) {
continue;
}
this.pilhaEscopos.definirInformacoesVariavel(nomeTipo, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(nomeTipo, tipo));
}
}
}
async resolverDecoradores() {
while (this.verificarTipoSimboloAtual(pitugues_1.default.ARROBA)) {
this.avancarEDevolverAnterior();
let nomeDecorador = '';
let linha;
const atributos = {};
const primeiraParteNomeDecorador = this.consumir(pitugues_1.default.IDENTIFICADOR, 'Esperado nome de decorador após "@".');
linha = Number(primeiraParteNomeDecorador.linha);
nomeDecorador += primeiraParteNomeDecorador.lexema;
while (this.verificarSeSimboloAtualEIgualA(pitugues_1.default.PONTO)) {
const parteNomeDecorador = this.consumir(pitugues_1.default.IDENTIFICADOR, 'Esperado nome de decorador após "."');
nomeDecorador += '.' + parteNomeDecorador.lexema;
}
if (this.verificarSeSimboloAtualEIgualA(pitugues_1.default.PARENTESE_ESQUERDO)) {
if (!this.verificarTipoSimboloAtual(pitugues_1.default.PARENTESE_DIREITO)) {
let indexArgumento = 0;
// Parâmetros nomeados como `sumario = "..."` usam identificadores simples
// como chaves. O analisador Pitugues faz verificação de escopo em cada
// identificador, então suprimimos essa verificação aqui.
this.intuirTipoQualquerParaIdentificadores = true;
do {
const valorExpressao = await this.atribuir();
atributos[indexArgumento] = valorExpressao;
if (indexArgumento === 0) {
atributos['caminho'] = valorExpressao;
}
indexArgumento++;
} while (this.verificarSeSimboloAtualEIgualA(pitugues_1.default.VIRGULA));
this.intuirTipoQualquerParaIdentificadores = false;
}
this.consumir(pitugues_1.default.PARENTESE_DIREITO, 'Esperado ")" após argumentos do decorador.');
}
this.pilhaDecoradores.push(new delegua_1.Decorador(this.hashArquivo, linha, nomeDecorador, atributos));
}
}
}
exports.AvaliadorSintaticoLiquidoPitugues = AvaliadorSintaticoLiquidoPitugues;
//# sourceMappingURL=avaliador-sintatico-liquido-pitugues.js.map