Repository: DesignLiquido/delegua
Pull request #239 (2023-01-14 15:01:07)

Tradutor - Resolve instancia de classe
Resolve: #229

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.76% (+0.07% 🔼)</div> |    3718/5407    |
|                                                                           🔴                                                                           | Branches   | <div title="Base coverage is: 56.91%">57.13% (+0.22% 🔼)</div> |    1106/1936    |
|                                                                           🟡                                                                           | Functions  | <div title="Base coverage is: 68.93%">69.04% (+0.12% 🔼)</div> |     542/785     |
|                                                                           🟡                                                                           | Lines      | <div title="Base coverage is: 69%">69.05% (+0.05% 🔼)</div>    |    3595/5206    |


<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.46% (+0.2% 🔼)</div> | <div title="Base coverage is: 84.52%">83.5% (-1.03% 🔻)</div> | <div title="Base coverage is: 90.91%">91.67% (+0.76% 🔼)</div> | <div title="Base coverage is: 96.24%">96.4% (+0.15% 🔼)</div> |

</details>

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

Patch:
diff --git a/fontes/tradutores/tradutor-javascript.ts b/fontes/tradutores/tradutor-javascript.ts
index 194846c4..746bebfb 100644
--- a/fontes/tradutores/tradutor-javascript.ts
+++ b/fontes/tradutores/tradutor-javascript.ts
@@ -39,6 +39,7 @@ import tiposDeSimbolos from '../tipos-de-simbolos/delegua';
  */
 export class TradutorJavaScript implements TradutorInterface {
     indentacao: number = 0;
+    declaracoesDeClasses: Classe[];
 
     traduzirSimboloOperador(operador: SimboloInterface): string {
         switch (operador.tipo) {
@@ -119,7 +120,17 @@ export class TradutorJavaScript implements TradutorInterface {
     traduzirConstrutoChamada(chamada: Chamada): string {
         let resultado = '';
 
-        resultado += `${this.dicionarioConstrutos[chamada.entidadeChamada.constructor.name](chamada.entidadeChamada)}(`;
+        const retorno = `${this.dicionarioConstrutos[chamada.entidadeChamada.constructor.name](chamada.entidadeChamada)}`;
+
+        const instanciaClasse = this.declaracoesDeClasses.some(declaracao => declaracao?.simbolo?.lexema === retorno);
+        if (instanciaClasse) {
+            const classe = this.declaracoesDeClasses.find(declaracao => declaracao?.simbolo?.lexema === retorno);
+            if (classe.simbolo.lexema === retorno)
+                resultado += `new ${retorno}`
+        } else {
+            resultado += retorno
+        }
+        resultado += '(';
         for (let parametro of chamada.argumentos) {
             resultado += this.dicionarioConstrutos[parametro.constructor.name](parametro) + ', ';
         }
@@ -467,6 +478,8 @@ export class TradutorJavaScript implements TradutorInterface {
     traduzir(declaracoes: Declaracao[]): string {
         let resultado = '';
 
+        this.declaracoesDeClasses = declaracoes.filter(declaracao => declaracao instanceof Classe) as Classe[];
+
         for (const declaracao of declaracoes) {
             resultado += `${this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao)} \n`;
         }


Test patch:
diff --git a/testes/tradutores/tradutor-javascript.test.ts b/testes/tradutores/tradutor-javascript.test.ts
index 6503d657..e5b1bf99 100644
--- a/testes/tradutores/tradutor-javascript.test.ts
+++ b/testes/tradutores/tradutor-javascript.test.ts
@@ -77,7 +77,7 @@ describe('Tradutor Delégua -> JavaScript', () => {
             expect(resultado).toMatch(/corre\(\)/i);
             expect(resultado).toMatch(/console\.log\('correndo'\)/i);
             expect(resultado).toMatch(/class Cachorro extends Animal {/i);
-            // expect(resultado).toMatch(/let thor = new Cachorro\(\)/i);
+            expect(resultado).toMatch(/let thor = new Cachorro\(\)/i);
             expect(resultado).toMatch(/thor.corre\(\)/i);
         });
 
@@ -119,7 +119,7 @@ describe('Tradutor Delégua -> JavaScript', () => {
             expect(resultado).toMatch(/this.valor = abc/i);
             expect(resultado).toMatch(/mostrarValor\(\) {/i);
             expect(resultado).toMatch(/console\.log\(this.valor\)/i);
-            // expect(resultado).toMatch(/let teste = new Teste\(100\)/i);
+            expect(resultado).toMatch(/let teste = new Teste\(100\)/i);
             expect(resultado).toMatch(/teste.mostrarValor\(\)/i);
         });