Repository: DesignLiquido/delegua
Pull request #416 (2023-05-27 01:30:24)

Tradução nomes de variáveis `Js` para `Python`

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

## 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: 54.99%">55% (+0.02% 🔼)</div>    |    7546/13719   |
|                                                                           🔴                                                                           | Branches   | <div title="Base coverage is: 45.43%">45.46% (+0.02% 🔼)</div> |    2307/5075    |
|                                                                           🔴                                                                           | Functions  | <div title="Base coverage is: 48.04%">48.08% (+0.05% 🔼)</div> |    1091/2269    |
|                                                                           🔴                                                                           | Lines      | <div title="Base coverage is: 54.86%">54.88% (+0.02% 🔼)</div> |    7374/13437   |


## Test suite run success
527 tests passing in 45 suites.

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

Patch:
diff --git a/fontes/tradutores/tradutor-python.ts b/fontes/tradutores/tradutor-python.ts
index 8e3279e6..c7015154 100644
--- a/fontes/tradutores/tradutor-python.ts
+++ b/fontes/tradutores/tradutor-python.ts
@@ -6,6 +6,10 @@ import tiposDeSimbolos from '../tipos-de-simbolos/delegua';
 export class TradutorPython implements TradutorInterface {
     indentacao: number = 0;
 
+    traduzirNomeVariavel(variavel: string): string {
+        return variavel.replace(/\.?([A-Z]+)/g, (x,y) => "_" + y.toLowerCase()).replace(/^_/, "")
+    }
+
     traduzirSimboloOperador(operador: SimboloInterface): string {
         switch (operador.tipo) {
             case tiposDeSimbolos.ADICAO:
@@ -321,32 +325,45 @@ export class TradutorPython implements TradutorInterface {
 
     traduzirDeclaracaoVar(declaracaoVar: Var): string {
         let resultado = '';
-        resultado += declaracaoVar.simbolo.lexema;
+        resultado += this.traduzirNomeVariavel(declaracaoVar.simbolo.lexema);
         resultado += ' = ';
-        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
-            );
+        const inicializador = declaracaoVar.inicializador;
+        if(inicializador) {
+            if (this.dicionarioConstrutos[inicializador.constructor.name]) {
+                resultado += this.dicionarioConstrutos[declaracaoVar.inicializador.constructor.name](
+                    declaracaoVar.inicializador
+                );
+            }
+            else {
+                resultado += this.dicionarioDeclaracoes[declaracaoVar.inicializador.constructor.name](
+                    declaracaoVar.inicializador
+                );
+            }
+        } else { 
+            resultado += "None" 
         }
+
         return resultado;
     }
 
     traduzirDeclaracaoConst(declaracaoConst: Const): string {
         let resultado = '';
-        resultado += declaracaoConst.simbolo.lexema;
+        resultado += this.traduzirNomeVariavel(declaracaoConst.simbolo.lexema);
         resultado += ' = ';
-        if (this.dicionarioConstrutos[declaracaoConst.inicializador.constructor.name]) {
-            resultado += this.dicionarioConstrutos[declaracaoConst.inicializador.constructor.name](
-                declaracaoConst.inicializador
-            );
+        const inicializador = declaracaoConst.inicializador;
+        if(inicializador) {
+            if (this.dicionarioConstrutos[inicializador.constructor.name]) {
+                resultado += this.dicionarioConstrutos[declaracaoConst.inicializador.constructor.name](
+                    declaracaoConst.inicializador
+                );
+            }
+            else {
+                resultado += this.dicionarioDeclaracoes[declaracaoConst.inicializador.constructor.name](
+                    declaracaoConst.inicializador
+                );
+            }
         } else {
-            resultado += this.dicionarioDeclaracoes[declaracaoConst.inicializador.constructor.name](
-                declaracaoConst.inicializador
-            );
+            resultado += 'None'
         }
         
         return resultado;


Test patch:
diff --git a/testes/tradutores/tradutor-python.test.ts b/testes/tradutores/tradutor-python.test.ts
index 5ee8cdbe..721019e1 100644
--- a/testes/tradutores/tradutor-python.test.ts
+++ b/testes/tradutores/tradutor-python.test.ts
@@ -42,6 +42,33 @@ describe('Tradutor Delégua -> Python', () => {
             expect(resultado).toMatch(/print\(\(2 \* 3\) \+ \(4 \^ 2\)\)/i);
         });
 
+        it('Nome variáveis', () => {
+            const retornoLexador = lexador.mapear(
+                [
+                    'var NOME1;',
+                    'var nomeCompleto1;',
+                    'var NomeCompleto2;',
+
+                    'const NOME2 = \'delegua\';',
+                    'const nomeCompleto3 = \'delegua completo3\';',
+                    'const NomeCompleto4 = \'delegua completo4\';',
+                ], 
+                -1
+            );
+
+            const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1);
+
+            const resultado = tradutor.traduzir(retornoAvaliadorSintatico.declaracoes);
+
+            expect(resultado).toBeTruthy();
+            expect(resultado).toMatch(/nome1/i);
+            expect(resultado).toMatch(/nome_completo1/i);
+            expect(resultado).toMatch(/nome_completo2/i);
+            expect(resultado).toMatch(/nome2/i);
+            expect(resultado).toMatch(/nome_completo3/i);
+            expect(resultado).toMatch(/nome_completo4/i);
+        });
+
         it('Atribuir', () => {
             const retornoLexador = lexador.mapear(
                 [