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;"
Token | Lexeme | Descrição |
---|---|---|
bool | bool | Palavra reservada |
identifier | isPositive | Identificador |
operator | = | Operador de atribuição |
identifier | value | Identificador |
operator | > | Operador relacional |
literal | 0 | Literal |
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:
- Dividir a cadeia de caracteres em partes menores.
- Classificar cada parte da cadeia em um tipo específico de Token.
- 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.