UNPKG

liquido

Version:

Conjunto de ferramentas para desenvolvimento de aplicações para a internet 100% em português

69 lines 4.14 kB
"use strict"; 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