Se você já se pegou pensando em como reduzir a carga cognitiva da sua equipe na análise de pull requests, é provável que já tenha se deparado com as regras lints.

Hoje, damos início a série “Escrevendo sua primeira Custom Lint”. Nesta primeira postagem, exploraremos o que é necessário para começarmos. Antes de mergulharmos na criação das regras lint, é fundamental entender como nosso programa é executado pela máquina.

Como nosso programa é executado?

Você já parou para pensar em como nosso programa é executado? Antes disso acontecer, o nosso código passa por uma série de transformações que o farão compreensível para a máquina.

A primeira etapa desse processo é a análise léxica, cuja função é receber um conjunto de caracteres e devolver um conjunto de Tokens. Um Token é um elemento que possui um significado único, de acordo com uma determinada sintaxe.

Exemplo

Imagine o seguinte código:

bool isPositive = value > 0;

Isso pode ser visto como uma cadeia única de caracteres

"\tbool isPositive = value > 0;"
TokenLexemeDescrição
boolboolPalavra reservada
identifierisPositiveIdentificador
operator=Operador de atribuição
identifiervalueIdentificador
operator>Operador relacional
literal0Literal
punctuation;Separador de fim de linha

Como funciona

Se você parou para analisar o exemplo fornecido, percebeu que o processo da análise léxica segue os seguintes passos:

  1. Dividir a cadeia de caracteres em partes menores.
  2. Classificar cada parte da cadeia em um tipo específico de Token.
  3. Extrair o valor concreto de cada Token, que chamamos de Lexeme.

Ah! Vale lembrar que o Token é a categoria à qual o elemento pertence, como identifier, operator, ou literal, enquanto o Lexeme é o seu valor concreto no código, como isPositive, > ou value.

Conclusão

Vimos que o código que digitamos no VSCode é transformado em uma sequência de Tokens, representando cada parte do código em uma categoria específica que a máquina consegue entender.

Na próxima postagem, vamos aprofundar como esses Tokens são usados para identificar padrões, detectar erros e, principalmente, como eles podem nos ajudar na construção de regras de lint personalizadas.