Repository: DesignLiquido/delegua
Pull request #253 (2023-01-27 12:31:42)

Corrige identação de condição se/senão

github-actions[bot]: <!-- jest coverage report action for options with hash 825fd481788efa7282e8569b20438413 -->

## Coverage report 



| <div title="Status of coverage:&#10; 🟢 - ok&#10; 🟡 - slightly more than threshold&#10; 🔴 - under the threshold">St.<sup>:grey_question:</sup></div> | Category   | Percentage                                                     | Covered / Total |
| :----------------------------------------------------------------------------------------------------------------------------------------------------: | :--------- | :------------------------------------------------------------- | :-------------: |
|                                                                           🟡                                                                           | Statements | <div title="Base coverage is: 67.74%">67.75% (+0.01% 🔼)</div> |    3782/5582    |
|                                                                           🔴                                                                           | Branches   | 56.51%                                                         |    1137/2012    |
|                                                                           🟡                                                                           | Functions  | 67.52%                                                         |     551/816     |
|                                                                           🟡                                                                           | Lines      | <div title="Base coverage is: 68.02%">68.03% (+0.01% 🔼)</div> |    3658/5377    |


## Test suite run success
256 tests passing in 23 suites.

<p align="right">Report generated by <a href="https://github.com/ArtiomTr/jest-coverage-report-action">🧪jest coverage report action</a> from cceb810b208f73f8f4d524d9be1bff9d1ee0c543</p>
<!-- Sticky Pull Request Comment -->

Patch:
diff --git a/fontes/tradutores/tradutor-javascript.ts b/fontes/tradutores/tradutor-javascript.ts
index d411c87d..27c6bc47 100644
--- a/fontes/tradutores/tradutor-javascript.ts
+++ b/fontes/tradutores/tradutor-javascript.ts
@@ -326,11 +326,11 @@ export class TradutorJavaScript implements TradutorInterface {
     }
 
     traduzirDeclaracaoImportar(declaracaoImportar: Importar) {
-        throw new Error('`importar()` não é suportado por este padrão de JavaScript.');
+        return `'importar() não é suportado por este padrão de JavaScript'`;
     }
 
     traduzirDeclaracaoLeia(declaracaoImportar: Importar) {
-        throw new Error('`leia()` não é suportado por este padrão de JavaScript.');
+        return `'leia() não é suportado por este padrão de JavaScript.'`;
     }
 
     traduzirDeclaracaoPara(declaracaoPara: Para): string {
@@ -366,14 +366,15 @@ export class TradutorJavaScript implements TradutorInterface {
         resultado += this.dicionarioDeclaracoes[declaracaoSe.caminhoEntao.constructor.name](declaracaoSe.caminhoEntao);
 
         if (declaracaoSe.caminhoSenao !== null) {
-            resultado += '\nelse ';
+            resultado += ' '.repeat(this.indentacao);
+            resultado += 'else ';
             const se = declaracaoSe?.caminhoSenao as Se;
             if (se?.caminhoEntao) {
                 resultado += 'if (';
                 resultado += this.dicionarioConstrutos[se.condicao.constructor.name](se.condicao);
                 resultado += ')';
                 resultado += this.dicionarioDeclaracoes[se.caminhoEntao.constructor.name](se.caminhoEntao);
-
+                resultado += ' '.repeat(this.indentacao);
                 if (se?.caminhoSenao) {
                     resultado += 'else ';
                     resultado += this.dicionarioDeclaracoes[se.caminhoSenao.constructor.name](se.caminhoSenao);
@@ -431,13 +432,19 @@ export class TradutorJavaScript implements TradutorInterface {
     traduzirDeclaracaoVar(declaracaoVar: Var): string {
         let resultado = 'let ';
         resultado += declaracaoVar.simbolo.lexema;
-        if(!declaracaoVar?.inicializador)
+        if (!declaracaoVar?.inicializador)
             resultado += ';';
         else {
             resultado += ' = ';
-            resultado += this.dicionarioConstrutos[declaracaoVar.inicializador.constructor.name](
-                declaracaoVar.inicializador
-            );
+            if (this.dicionarioConstrutos[declaracaoVar.inicializador.constructor.name]){
+                resultado += this.dicionarioConstrutos[declaracaoVar.inicializador.constructor.name](
+                    declaracaoVar.inicializador
+                );
+            } else {
+                resultado += this.dicionarioDeclaracoes[declaracaoVar.inicializador.constructor.name](
+                    declaracaoVar.inicializador
+                );
+            }
             resultado += ";"
         }
         return resultado;


Test patch:
diff --git a/testes/tradutores/tradutor-javascript.test.ts b/testes/tradutores/tradutor-javascript.test.ts
index c9aa48f6..581cebc6 100644
--- a/testes/tradutores/tradutor-javascript.test.ts
+++ b/testes/tradutores/tradutor-javascript.test.ts
@@ -704,5 +704,29 @@ describe('Tradutor Delégua -> JavaScript', () => {
             // expect(resultado).toMatch(/a > 0 && a === 3/i);
             expect(resultado).toMatch(/console\.log\(5\)/i);
         });
+
+        it('importar', () => {
+            const retornoLexador = delegua.lexador.mapear(
+                [
+                    'var lodash = importar\(\'lodash\'\)',
+                ], -1);
+            const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador);
+
+            const resultado = tradutor.traduzir(retornoAvaliadorSintatico.declaracoes);
+            expect(resultado).toBeTruthy();
+            expect(resultado).toMatch(/let lodash = \'importar\(\) não é suportado por este padrão de JavaScript\'/i);
+        });
+        
+        it('leia', () => {
+            const retornoLexador = delegua.lexador.mapear(
+                [
+                    'var nome = leia\(\'Digite seu nome:\'\)',
+                ], -1);
+            const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador);
+
+            const resultado = tradutor.traduzir(retornoAvaliadorSintatico.declaracoes);
+            expect(resultado).toBeTruthy();
+            expect(resultado).toMatch(/let nome = \'leia\(\) não é suportado por este padrão de JavaScript.\'/i);
+        });
     });
 });