Repository: DesignLiquido/delegua
Pull request #238 (2023-01-14 13:38:48)

Tradutor - Declarando variável não inicializada

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: 68.69%">68.71% (+0.02% 🔼)</div> |    3709/5398    |
|                                                                           🔴                                                                           | Branches   | <div title="Base coverage is: 56.91%">56.99% (+0.08% 🔼)</div> |    1096/1923    |
|                                                                           🟡                                                                           | Functions  | 68.93%                                                         |     539/782     |
|                                                                           🟡                                                                           | Lines      | <div title="Base coverage is: 69%">69.02% (+0.02% 🔼)</div>    |    3589/5200    |


<details><summary>Show files with reduced coverage 🔻</summary>
<br/>

| <div title="Status of coverage:&#10; 🟢 - ok&#10; 🟡 - slightly more than threshold&#10; 🔴 - under the threshold">St.<sup>:grey_question:</sup></div> | File                                                                                | Statements                                                     | Branches                                                       | Functions | Lines                                                         |
| :----------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------- | :------------------------------------------------------------- | :------------------------------------------------------------- | :-------- | :------------------------------------------------------------ |
|                                                                           🟢                                                                           | <div title="tradutores/tradutor-javascript.ts">`...` / tradutor-javascript.ts</div> | <div title="Base coverage is: 96.26%">96.31% (+0.05% 🔼)</div> | <div title="Base coverage is: 84.52%">84.44% (-0.08% 🔻)</div> | 90.91%    | <div title="Base coverage is: 96.24%">96.3% (+0.05% 🔼)</div> |

</details>

## Test suite run success
251 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 2f9e8842586bdf5f1649b5df355bba97c42c3644</p>
<!-- Sticky Pull Request Comment -->

Patch:
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 3f734157..501f79b3 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -440,6 +440,23 @@
             "console": "integratedTerminal",
             "internalConsoleOptions": "neverOpen"
         },
+        {
+            "type": "node",
+            "request": "launch",
+            "name": "Tradutores > Delégua > JavaScript > Teste",
+            "skipFiles": ["<node_internals>/**", "node_modules/**"],
+            "cwd": "${workspaceRoot}",
+            "console": "integratedTerminal",
+            "args": [
+                "${workspaceFolder}${pathSeparator}execucao.ts",
+                "-t",
+                "js",
+                "-s",
+                "./exemplos/condicionais/se.delegua"
+            ],
+            "runtimeExecutable": "node",
+            "runtimeArgs": ["--nolazy", "-r", "ts-node/register/transpile-only"]
+        },
         {
             "type": "node",
             "request": "launch",
@@ -813,23 +830,6 @@
             "runtimeExecutable": "node",
             "runtimeArgs": ["--nolazy", "-r", "ts-node/register/transpile-only"]
         },
-        {
-            "type": "node",
-            "request": "launch",
-            "name": "Tradutores > Delégua > JavaScript > Teste",
-            "skipFiles": ["<node_internals>/**", "node_modules/**"],
-            "cwd": "${workspaceRoot}",
-            "console": "integratedTerminal",
-            "args": [
-                "${workspaceFolder}${pathSeparator}execucao.ts",
-                "-t",
-                "js",
-                "-s",
-                "./exemplos/condicionais/se.delegua"
-            ],
-            "runtimeExecutable": "node",
-            "runtimeArgs": ["--nolazy", "-r", "ts-node/register/transpile-only"]
-        },
         {
             "type": "node",
             "request": "launch",
diff --git a/fontes/tradutores/tradutor-javascript.ts b/fontes/tradutores/tradutor-javascript.ts
index 746bebfb..432f8e76 100644
--- a/fontes/tradutores/tradutor-javascript.ts
+++ b/fontes/tradutores/tradutor-javascript.ts
@@ -319,8 +319,7 @@ export class TradutorJavaScript implements TradutorInterface {
     traduzirDeclaracaoPara(declaracaoPara: Para): string {
         let resultado = 'for (';
         resultado +=
-            this.dicionarioDeclaracoes[declaracaoPara.inicializador.constructor.name](declaracaoPara.inicializador) +
-            '; ';
+            this.dicionarioDeclaracoes[declaracaoPara.inicializador.constructor.name](declaracaoPara.inicializador) + ' ';
         resultado +=
             this.dicionarioConstrutos[declaracaoPara.condicao.constructor.name](declaracaoPara.condicao) + '; ';
         resultado +=
@@ -411,10 +410,16 @@ export class TradutorJavaScript implements TradutorInterface {
 
     traduzirDeclaracaoVar(declaracaoVar: Var): string {
         let resultado = 'let ';
-        resultado += declaracaoVar.simbolo.lexema + ' = ';
-        resultado += this.dicionarioConstrutos[declaracaoVar.inicializador.constructor.name](
-            declaracaoVar.inicializador
-        );
+        resultado += declaracaoVar.simbolo.lexema;
+        if(!declaracaoVar?.inicializador)
+            resultado += ';';
+        else {
+            resultado += ' = ';
+            resultado += this.dicionarioConstrutos[declaracaoVar.inicializador.constructor.name](
+                declaracaoVar.inicializador
+            );
+            resultado += ";"
+        }
         return resultado;
     }
 
diff --git a/package.json b/package.json
index be6b7d5b..24031b15 100644
--- a/package.json
+++ b/package.json
@@ -43,7 +43,7 @@
         },
         {
             "name": "Samuel Renan Gonçalves Vaz",
-            "url": "https://www.linkedin.com/in/samuel-renan-gon%C3%A7alves-vaz-b6b83a103/"
+            "url": "https://www.linkedin.com/in/samuel-renan-goncalves-vaz"
         },
         {
             "name": "Alessandro Fuhr de Mello",


Test patch:
diff --git a/testes/tradutores/tradutor-javascript.test.ts b/testes/tradutores/tradutor-javascript.test.ts
index e5b1bf99..ab0c5d02 100644
--- a/testes/tradutores/tradutor-javascript.test.ts
+++ b/testes/tradutores/tradutor-javascript.test.ts
@@ -37,6 +37,20 @@ describe('Tradutor Delégua -> JavaScript', () => {
             delegua = new Delegua('delegua');
         });
 
+        it('declarando variável não inicializada', () => {
+            const retornoLexador = delegua.lexador.mapear(
+                [
+                    'var a;',
+                ],
+                -1
+            );
+            const retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador);
+
+            const resultado = tradutor.traduzir(retornoAvaliadorSintatico.declaracoes);
+            expect(resultado).toBeTruthy();
+            expect(resultado).toMatch(/let a;/i);
+        });
+
         it('definindo funcao com variavel', () => {
             const retornoLexador = delegua.lexador.mapear(
                 [