Artigo
· 3 hr atrás 3min de leitura

Como encontrar um texto específico em ObjectScript

Você provavelmente conhece essa situação:

Algum tempo atrás, você encontrou uma função $ZU muito especial para um tipo de problema bem específico. Uma espécie de fórmula mística. Ela se tornou popular e foi usada por muitos desenvolvedores em todo o seu código e em todas as suas instalações.

Depois de várias versões e atualizações, você é informado pela ISC de que seu $ZU místico está obsoleto (deprecated) e não é mais suportado. Você é aconselhado a substituí-lo por um novo $something().

Então, como encontrar e documentar o uso desse código misterioso?
Ele pode estar localizado em classes, em código MAC, INT ou INC.
Também pode estar espalhado por vários namespaces.
No passado, o Studio ainda não estava completo: era pouco adequado, lento e impreciso.

Já me deparei com essa situação mais de uma vez em diferentes instalações.
O controle de versão (Source Control) não estava disponível na época e só passou a ser usado raramente quando foi finalmente introduzido.

Como ObjectScript era a única escolha possível para enfrentar esse desafio, escrevi meu próprio utilitário.
Minha solução evoluiu ao longo dos anos e, quando a migração para o IRIS foi planejada, verifiquei mais uma vez o quanto ela ainda era útil.
E, por ter sido escrita inteiramente em ObjectScript puro, ela funcionou no IRIS sem que fosse necessário alterar um único caractere.

Como você já deve saber, o problema de procurar um trecho específico de texto em ObjectScript não mudou.

Meus objetivos pessoais para esse utilitário foram:

  • apenas ObjectScript
  • nada de construções sofisticadas, milagrosas ou frágeis
  • o menor uso possível de funções $avançadas
  • priorizar legibilidade em vez de elegância, pensando na manutenção futura
  • exibir o número de ocorrências encontradas por namespace e por elemento de código
  • para classes, também distinguir entre:
    • parâmetros
    • propriedades (se calculadas)
    • métodos
    • índices
  • uma opção para mostrar a linha que contém a ocorrência
  • nenhuma preocupação com a listagem de saída:
    • qualquer programa de terminal pode gravar um log
    • o bash tem o STDOUT exatamente para isso

Esse utilitário, portanto, está disponível para você no Open Exchange e no GitHub.
Também criei um video para demonstrar a ferramenta em funcionamento.
Ela também está disponível no Demo Server.

Basta iniciá-la pelo terminal:
user>DO ^rcc.find

  • qual texto você está procurando?
  • Verbose?
  • você quer ver cada linha completa que contém o texto?
    • aviso: isso pode gerar uma listagem muito grande
    • um teste recente encontrou mais de 90.000 ocorrências
    • com verbose=1, você terá mais de 90.000 linhas
  • Apenas maiúsculas (Uppercase only)?
    • isso resolve o problema de funções escritas
      em maiúsculas, minúsculas ou em formato misto
    • Uppercase=1 garante que você não perca nenhuma ocorrência
  • Qual tipo de código você deseja examinar? (CLS, MAC, INT, INC, ALL)
  • Qual namespace você deseja pesquisar?
    • um namespace específico da sua lista ou ALL
    • para ALL, você obtém uma lista condensada de namespaces e tipos
      (não visível no vídeo)

Selecionar o namespace inicia a varredura.

Vamos dançar! 

USER> do ^rcc.find
----------------

enter search string [$ZU] <blank> to exit: RCC
          Verbose? (0,1) [0]:
          Force UpperCase? (1,0) [1]:

enter code type (CLS,MAC,INT,INC,ALL) [ALL]: CLS

select namespace (ALL,%SYS,DOCBOOK,ENSDEMO,ENSEMBLE,SAMPLES,USER) [USER]:

** Scan Namespace: USER **

** CLS **
** 2      User.ConLoad
** 15     User.Main
** 3      csp.form
** 3      csp.winner
** 2      dc.rcc.Contest
** 37     dc.rcc.Main
** 1      dc.rcc.Prize
** 63 CLS **
----------------

Espero que você tenha gostado da minha história.
Tentei evitar listagens de código entediantes, é para isso que servem o Open Exchange e o GitHub.

Discussão (0)1
Entre ou crie uma conta para continuar