totvs / tds-vscode

Totvs Developer Studio for vscode
Apache License 2.0
170 stars 100 forks source link

Após release 1.2.5 o tratamento de tipos está comprometido #758

Closed ricardohmlsp closed 3 years ago

ricardohmlsp commented 3 years ago

O tratamento de Tipos sempre acusa erro nos fontes e após compilar o mesmo entende que não existe e é dados como valido porem o projeto visualmente fica cheio de falhas ao abrir.

por exemplo

Local cNota := "" as character

cNota := cValTochar(StrZero(val(oXml[1,1]:_RETORNO:_XML_NFE:_NFEPROC:_NFE:_INFNFE:_IDE:_NNF:TEXT),9,0))

Definindo que a variavel é character e atribuindo um valor fazendo Cast para character ao validar a senteça o sistema diz que a variavel é incompativel com o valor atribuido o que não é verdade ( mesmo que no exemplo acima) tenha uma redundância feita propositalmente cValTochar sobre o StrZero o retorno é character e nao numerico.

Incompatible type N (106) Error: Incompatible type N (109) Error: Incompatible type N (486) Error: Invalid Type ARRAYS (744) Error: 'return': cannot convert from A to L (756) Error: Invalid Type ARRAYS

Após compilar os problemas somem mas se fechar o fonte e abrir novamente na IDE voltam.

na release 1.2.5 isso não ocorre, não é impeditivo mas eu ainda estou usando a release 1.2.5 por esse motivo.

lwtnb-wrk commented 3 years ago

@ricardohmlsp Não ficou claro se isso está ocorrendo na versão 1.3.0 em diante. Isso ocorre também na última versão 1.3.2?

Além disso, qual a versão do AppServer que está utilizando?

Veja em Gerando logs como gerar e nos envie os logs para análise.

Coloquei essas duas linhas em um fonte aqui e não apresentaram nenhum erro e nem warnings.

Você tem outras extensões instaladas além do tds-vscode?

ricardohmlsp commented 3 years ago

Olá Estou utilizando a versão 1.3.2 e sim desde a 1.3.0 pra frente apresenta o erro.

Versão do Appserver:

Dados do Server

Versão: TOTVS Varejo

Build AppServer: 7.00.191205P-20210114 - 64 bits

Nome do servidor: OMEGAG5

Sistema operacional: Windows 10

Appserver version: 19.3.1.5

Build DBAccess: 20200606-20201110

Release do RPO: 12.1.027 - Out 2020

Release do dicionário: 12.1.027 - Out 2020

Local files: CTREE

License server: 2014 - 3.2.0

DB DataBase: MSSQL

DB API Build: 20200606-20201110

Ambiente: Varejo

Objeto: INTNOTA

Programa: INTNOTA.TLPP

Tipo: ADVPL

Build: BUILD_USER

Data: 14/07/2021 19:53:17

Dicionário no banco de dados: Sim

Tenho essas extensões

As Demais são de Dart , Flutter Docker etc...

De: lwtnb-wrk @.> Enviada em: quarta-feira, 14 de julho de 2021 20:08 Para: totvs/tds-vscode @.> Cc: ricardohmlsp @.>; Mention @.> Assunto: Re: [totvs/tds-vscode] Após release 1.2.5 o tratamento de tipos está comprometido (#758)

@ricardohmlsp https://github.com/ricardohmlsp Não ficou claro se isso está ocorrendo na versão 1.3.0 em diante. Isso ocorre também na última versão 1.3.2?

Além disso, qual a versão do AppServer que está utilizando?

Veja em Gerando logs https://github.com/totvs/tds-vscode/blob/master/TROUBLESHOOTING.md#gerando-logs como gerar e nos envie os logs para análise.

Coloquei essas duas linhas em um fonte aqui e não apresentaram nenhum erro e nem warnings.

Você tem outras extensões instaladas além do tds-vscode?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/totvs/tds-vscode/issues/758#issuecomment-880267405 , or unsubscribe https://github.com/notifications/unsubscribe-auth/ARCWA4KA5AAXK4QLJ6CEXQLTXYKDXANCNFSM5AMIPUBA . https://github.com/notifications/beacon/ARCWA4M3ORPLQJAJUTEWLV3TXYKDXA5CNFSM5AMIPUBKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOGR35BDI.gif

lwtnb-wrk commented 3 years ago

@ricardohmlsp Nos envie os logs então, se possivel um fonte que ocorra os erros e um print da tela com os erros. Adianto que anexos desse tipo devem ser pelo github, pois por email eles não sao anexados na issue.

ricardohmlsp commented 3 years ago

totvsls.log totvsls_in.log totvsls_out.log

Segue arquivos para analise

lwtnb-wrk commented 3 years ago

@ricardohmlsp Grato pelos logs. Conseguimos reproduzir o seu problema e estamos averiguando. Somente para deixar claro, esses "erros" ao abrir o fonte, são gerados pelo Linter como ferramenta de apoio ao desenvolvimento. Ele deveria dar os mesmo erros e warnings que a compilação, o que não esta ocorrendo neste caso. Mas no final, o que vale é a compilação, então se na compilação não apresentar erro, a principio estará tudo bem no RPO.

ricardohmlsp commented 3 years ago

@lwtnb-wrk muito obrigado pelo retorno e que bom que reproduziu , sim o problema é apenas antes da compilação visualmente fica chato mas quando compila os "errros" somem e sabe que está tudo ok.

Abraço

danielbolognani commented 3 years ago

Boa tarde @ricardohmlsp Conversamos com o pessoal do Appserver para entender esse problema e na verdade temos a seguinte situação: A análise dos fontes pelo Linter é feita através da última versão do Appserver (nesse caso que ainda não está disponível para clientes), por isso podem existir diferenças no compilador. É interessante se atentar a esse tipo de mudança pois quer dizer que na próxima versão do Appserver essa situação irá virar um erro de fato, ou seja, não será mais possível compilar o fonte em questão.

Na próxima versão do Appserver o compilador TLPP está mais crítico para evitar erros durante a execução e já acusá-los durante a compilação.

No seu caso, o problema acontece pois um objeto nunca pode ser acessado como se fosse um array. A solução definitiva seria mudar o tipo de variável para o tipo exato do retorno da User Function findNota. Parece ser um array ou um json, ou seja, a variável oNota deve ser declarada: Local oNota := nil as Json ou Local oNota := nil as Array

Recomendamos que a situação seja corrigida agora para evitar problemas no futuro, mas se quiser, pode continuar utilizando e ignorar os erros de Linter que aparecerem nesses fontes.

Muito obrigado pela atenção e pelo reporte de problema.

ricardohmlsp commented 3 years ago

Olá @danielbolognani entendi, porem tenho uma questão nesse exemplo abaixo

Local cNota := "" as character

cNota := aNotas[1,3]

o Listner apresenta erro , porem o conteudo da Variavel aNotas[1,3] é um character

o novo appserver vai tratar esse caso como erro fatal ou vai entender que se trata de uma atribuição que apenas em temppo de excução vai saber se o dados está correto?.

a maioria dos erros que o Listner aponta são dessa natureza.

Obrigado pela atenção

Abraço

danielbolognani commented 3 years ago

Olá @ricardohmlsp, na verdade o problema que o Linter aponta nesse caso é em relação ao aNotas[1,3] e não ao cNota, como o aNotas[1,3] foi declarado como Object, é isso que o compilador está reclamando. A principio todos os erros que o Linter aponta serão erros fatais na próxima versão do Appserver.

Se precisar de algum auxilio ou achar que o Linter está apontando erro onde não deveria, pode anexar o fonte ou um trecho dele aqui que a gente analisa.

Abraços!

ricardohmlsp commented 3 years ago

Olá @danielbolognani tem razão entendi o funcionamento e ja ajustei o código e os alertas ja sumiram , muito grato pela explicação