Repository: DesignLiquido/delegua
Pull request #589 (2024-01-21 00:46:47)

A formatação na extensão teve algumas coisas bem estranhas. Essa PR corrige elas.


Patch:
diff --git a/fontes/formatadores/formatador-delegua.ts b/fontes/formatadores/formatador-delegua.ts
index a1f6cdb1..822abbd1 100644
--- a/fontes/formatadores/formatador-delegua.ts
+++ b/fontes/formatadores/formatador-delegua.ts
@@ -115,7 +115,7 @@ export class FormatadorDelegua implements VisitanteComumInterface {
     }
 
     visitarDeclaracaoDeAtribuicao(expressao: Atribuir) {
-        if (
+        if (expressao.valor instanceof Binario &&
             [
                 tiposDeSimbolos.MAIS_IGUAL,
                 tiposDeSimbolos.MENOS_IGUAL,
@@ -127,7 +127,6 @@ export class FormatadorDelegua implements VisitanteComumInterface {
         ) {
             this.visitarExpressaoBinaria(expressao.valor);
         } else {
-            this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}`;
             this.codigoFormatado += `${expressao.simbolo.lexema} = `;
             this.formatarDeclaracaoOuConstruto(expressao.valor);
         }
@@ -265,15 +264,9 @@ export class FormatadorDelegua implements VisitanteComumInterface {
 
         this.indentacaoAtual -= this.tamanhoIndentacao;
         if (declaracao.caminhoSenao) {
-            this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}} senão {${this.quebraLinha}`;
-            this.indentacaoAtual += this.tamanhoIndentacao;
-            for (let declaracaoBloco of (declaracao.caminhoSenao as Bloco).declaracoes) {
-                this.formatarDeclaracaoOuConstruto(declaracaoBloco);
-            }
-            this.indentacaoAtual -= this.tamanhoIndentacao;
+            this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}} senão `;
+            this.formatarDeclaracaoOuConstruto(declaracao.caminhoSenao);
         }
-
-        this.codigoFormatado += `${' '.repeat(this.indentacaoAtual)}}${this.quebraLinha}`;
     }
 
     visitarDeclaracaoTente(declaracao: Tente) {
@@ -437,7 +430,7 @@ export class FormatadorDelegua implements VisitanteComumInterface {
     }
 
     private formatarBlocoOuVetorDeclaracoes(declaracoes: Declaracao[]) {
-        this.codigoFormatado += ` {${this.quebraLinha}`;
+        this.codigoFormatado += `{${this.quebraLinha}`;
         this.indentacaoAtual += this.tamanhoIndentacao;
         for (let declaracaoBloco of declaracoes) {
             this.formatarDeclaracaoOuConstruto(declaracaoBloco);


Test patch:
diff --git a/testes/formatadores/formatador-delegua.test.ts b/testes/formatadores/formatador-delegua.test.ts
index ac71ad1d..0f77a8ce 100644
--- a/testes/formatadores/formatador-delegua.test.ts
+++ b/testes/formatadores/formatador-delegua.test.ts
@@ -9,6 +9,20 @@ describe('Formatadores > Delégua', () => {
     const avaliadorSintatico = new AvaliadorSintatico();
     const lexador = new Lexador();
 
+    it('Atribuição por índice', () => {
+        const resultadoLexador = lexador.mapear(
+            ["var fila = []; fila[0] = 1 fila[1] = 2 fila[3] = 3 escreva(fila[3])"], 
+            -1
+        );
+
+        const resultadoAvaliacaoSintatica = avaliadorSintatico.analisar(resultadoLexador, -1);
+        const resultado = formatador.formatar(resultadoAvaliacaoSintatica.declaracoes);
+        const linhasResultado = resultado.split(sistemaOperacional.EOL);
+        
+        // console.log(resultado);
+        expect(linhasResultado).toHaveLength(6);
+    });
+
     it('Atribuições múltiplas', () => {
         const resultadoLexador = lexador.mapear([
             "var a, b, c = 1, 2, 3 const d,f,g=4,5,6",
@@ -87,7 +101,7 @@ describe('Formatadores > Delégua', () => {
         const linhasResultado = resultado.split(sistemaOperacional.EOL);
         
         // console.log(resultado);
-        expect(linhasResultado).toHaveLength(8);
+        expect(linhasResultado).toHaveLength(7);
     });
 
     it('Expressões Regulares', () => {
@@ -106,6 +120,30 @@ describe('Formatadores > Delégua', () => {
         expect(linhasResultado).toHaveLength(4);
     });
 
+    it('Falhar', () => {
+        const resultadoLexador = lexador.mapear(
+            [
+                "funcao temDigitoRepetido(num) {",
+                "    var str = texto( num);",
+                "  para (var i =1; i< tamanho(str);i++   ) {",
+                "        se (str[i] != str[0]) {",
+                "     falhar \"Erro!!!\"",
+                "}",
+                "    }",
+                "   retorna verdadeiro;",
+                "}",
+            ], 
+            -1
+        );
+
+        const resultadoAvaliacaoSintatica = avaliadorSintatico.analisar(resultadoLexador, -1);
+        const resultado = formatador.formatar(resultadoAvaliacaoSintatica.declaracoes);
+        const linhasResultado = resultado.split(sistemaOperacional.EOL);
+        
+        // console.log(resultado);
+        expect(linhasResultado).toHaveLength(9);
+    });
+
     it('Fazer', () => {
         const resultadoLexador = lexador.mapear(
             ["var a = 1 fazer { a++ } enquanto a < 10 "],
@@ -155,7 +193,7 @@ describe('Formatadores > Delégua', () => {
         const linhasResultado = resultado.split(sistemaOperacional.EOL);
         
         // console.log(resultado);
-        expect(linhasResultado).toHaveLength(10);
+        expect(linhasResultado).toHaveLength(9);
     });
 
     it('Funções com argumentos tipados', () => {
@@ -174,6 +212,22 @@ describe('Formatadores > Delégua', () => {
         expect(linhasResultado).toHaveLength(4);
     });
 
+    it('Importar', () => {
+        const resultadoLexador = lexador.mapear(
+            [
+                "var dm = importar('@designliquido/delegua-matematica')var m = importar('matematica') dm.raizQuadrada(9) // Imprime 3",
+            ], 
+            -1
+        );
+
+        const resultadoAvaliacaoSintatica = avaliadorSintatico.analisar(resultadoLexador, -1);
+        const resultado = formatador.formatar(resultadoAvaliacaoSintatica.declaracoes);
+        const linhasResultado = resultado.split(sistemaOperacional.EOL);
+        
+        console.log(resultado);
+        expect(linhasResultado).toHaveLength(3);
+    });
+
     it('leia() e escreva()', () => {
         const resultadoLexador = lexador.mapear(
             [`var a=leia( "Escreva alguma coisa"   ) escreva( a )`], 
@@ -213,7 +267,7 @@ describe('Formatadores > Delégua', () => {
         const linhasResultado = resultado.split(sistemaOperacional.EOL);
         
         // console.log(resultado);
-        expect(linhasResultado).toHaveLength(7);
+        expect(linhasResultado).toHaveLength(6);
     });
 
     it('Para cada', () => {
@@ -299,58 +353,4 @@ describe('Formatadores > Delégua', () => {
         console.log(resultado);
         expect(linhasResultado).toHaveLength(4);
     });
-
-    it('Falhar', () => {
-        const resultadoLexador = lexador.mapear(
-            [
-                "funcao temDigitoRepetido(num) {",
-                "    var str = texto( num);",
-                "  para (var i =1; i< tamanho(str);i++   ) {",
-                "        se (str[i] != str[0]) {",
-                "     falhar \"Erro!!!\"",
-                "}",
-                "    }",
-                "   retorna verdadeiro;",
-                "}",
-            ], 
-            -1
-        );
-
-        const resultadoAvaliacaoSintatica = avaliadorSintatico.analisar(resultadoLexador, -1);
-        const resultado = formatador.formatar(resultadoAvaliacaoSintatica.declaracoes);
-        const linhasResultado = resultado.split(sistemaOperacional.EOL);
-        
-        // console.log(resultado);
-        expect(linhasResultado).toHaveLength(10);
-    });
-
-    it('Importar', () => {
-        const resultadoLexador = lexador.mapear(
-            [
-                "var dm = importar('@designliquido/delegua-matematica')var m = importar('matematica') dm.raizQuadrada(9) // Imprime 3",
-            ], 
-            -1
-        );
-
-        const resultadoAvaliacaoSintatica = avaliadorSintatico.analisar(resultadoLexador, -1);
-        const resultado = formatador.formatar(resultadoAvaliacaoSintatica.declaracoes);
-        const linhasResultado = resultado.split(sistemaOperacional.EOL);
-        
-        console.log(resultado);
-        expect(linhasResultado).toHaveLength(3);
-    });
-
-    it('Atribuição por Indice', () => {
-        const resultadoLexador = lexador.mapear(
-            ["var fila = []; fila[0] = 1 fila[1] = 2 fila[3] = 3 escreva(fila[3])"], 
-            -1
-        );
-
-        const resultadoAvaliacaoSintatica = avaliadorSintatico.analisar(resultadoLexador, -1);
-        const resultado = formatador.formatar(resultadoAvaliacaoSintatica.declaracoes);
-        const linhasResultado = resultado.split(sistemaOperacional.EOL);
-        
-        // console.log(resultado);
-        expect(linhasResultado).toHaveLength(6);
-    });
 });