Swift Lint

Vinicius Mangueira
7 min readJul 9, 2019

--

Introdução

Manter uma linha de código durante de todo um projeto é sempre bem difícil, mesmo com uma equipe de desenvolvedores muito boa e com nível de entrosamento alto é difícil manter uma base de código quando se tem diversas mentes com diferentes convenções, estilos de código e níveis de experiência, acaba resultando em uma aplicação horrível de depurar e debugar, principalmente quando um integrante novo forma a equipe e vai ver um código com padrões, convenções e normas diferentes.

Para evitar esses problemas existe o Swift Lint que nos permite adaptar um conjunto de regras para semântica, onde você mesmo que define essa estrutura, onde o Lint vai identificar automaticamente se algo foge do padrão desejado. Além disso somos programadores extremamente preguiçosos e tendemos esquecer de verificar se o nosso código segue realmente o padrão adequado pela equipe.

Swift Lint:

O Swift Lint é uma ferramenta open-source desenvolvida pela Realm, no qual você mesmo que defini suas regras no estilo de codificação e force que o programador do projeto as siga, Ele possuí uma tool de bash, que é um plug-in Xcode, no qual se integra com o Atom., então, ele sempre se ajusta ao seu ambiente.

Uso:

A ferramenta te dá suporte a escrever código consistente, a maneira que você deve usar é, adicionar na fase de construção do seu projeto no Xcode, através de uma das maneiras de instalação citadas a cima.

O Swift Lint está embutido em algumas das ferramentas que a própria Apple fornece para o próprio Swift, ferramentas como o Source Kit e o Swift Compiler, então ele garantirá que você não esteja usando a sua própria convenção do Swift.

Vantagens de usar:

  • Consistência dentro de um único projeto.
  • Consistência entre os projetos.
  • Consistência entre equipes também
  • Legibilidade você se concentra na funcionalidade principal do projeto

Regras:

Existem 60 regras na qual o SwiftLint pode impor a você, dessas 60, cujo 44 estão ativadas quando você adiciona o Lint ao projeto e 16 delas não estão ativadas por padrão e nós chamamos essas de regras de regras de ativação, você precisa dizer explicitamente que quer executar na codebase e sabe dos riscos pois ela já não é ativada por default.

Cerca de 20% das regras podem ser corrigidas por default, o que significa que você pode deixar o Swift Lint corrigir automaticamente pra você as violações de estilo em seu projeto, você pode fazer isso como citado acima devido a integração com Source Kit e Swift Compiler.

Abaixo, segue alguns conjuntos de regras e especificações aplicáveis

  • Corrigidas: Como citado anteriormente são regras que se você quiser o Swift Lint já formata e corrige automaticamente
  • Configuráveis: Para toda regra no Swift Lint você pode especificar a gravidade em sua configuração e, em 19 dessas regras, você pode especificar a configuração personalizada
  • Estilísticas: Essas são as regras aplicadas por questão de preferência, exemplo: São regras de como determinar onde colocar consistentemente atributos como @objc ou @testable
  • Higiênicas: Essas regras geralmente garantem que seu projeto não esteja explodindo no escopo ou que você não esteja sobrecarregando um único arquivo com mais do que as responsabilidades ou os tópicos dos quais ele deve estar ciente.
  • Convenção: São estilos que a comunidade Swift ou a Apple escolheram para se adequar. Por exemplo, recentemente a Apple mencionou que, para toda a documentação do Swift, eles geralmente usam parênteses void-> sobre void-> para representar um fechamento que não possui parâmetros. Considerando que eles preferem ->void over arrow-empty-parênteses para afirmar que o valor de retorno é nulo.

Instalação:

Usando o brew você pode instalar de maneira simples como pode ver abaixo:

brew install swiftlint

Usando o CocoaPods também é muito simples você só deve adicionar ao seu Podfile, como podemos ver abaixo:

pod ’SwiftLint

Existem outras formas de instalação porém essas acima são as duas principais

Abaixo você verá um exemplo de uma aplicação que utilizaremos para aprender um pouco sobre essas normas:

Clique aqui para ter acesso ao repositório.

Depois de instalarmos o Swift Lint, temos que criar dentro da parte da nossa aplicação, em Build Phases e rodar um novo Script.

De cara podemos perceber que quando tentarmos rodar esse projeto com algumas telas e bem simples:

Com o simples script que inserimos dentro de Build Phases, que são as fases de construção do App, ou seja você pode definir regras e construções lá, podemos perceber que antes o projeto que rodava, não está mais a buildar.

Podemos perceber erros(fora da regra) que antes o próprio interpretador do Swift nos permitia adotar como Force Cast que é bastante usado para fazer dequeue em células reutilizáveis já que você sabe e necessita de componentes da cell dentro de sua controller, e por que acontece esse erro? Já que é algo que o interpretador conhece e espera? E também como você pode perceber existe um warning na linha 87, pois a linha está somente em branco. E no app delegate um erro pois a linha contém mais de 120 caracteres, se esse comportamento é esperado pelo interpretador Swift, por que estamos tomando erro?

A resposta é bem simples, lembra do Script que colocamos? Ele tem a total relação com esses erros e warnings, pois ele utiliza de todas as regras default do Swift Lint, como por exemplos as citadas acima de dar aviso quando linhas em brancos são adicionadas e não utilizadas ou quando uma linha possuí muitos caracteres e até mesmo o Force Cast.

Se você inserir esse comando acima, você poderá ver todas as regras inseridas no projeto.

./Pods/Swift Lint/swiftlint rules

Com esse comando você pode ver um conjunto de regras e permissões que foram mostradas acima, definir se aquela instrução gera um warning ou erro.

Editando configuração de Regras:

Primeiro resolveremos ou setaremos o comportamento padrão de quando utilizamos o Swift Lint de que linhas não podem ter mais de 120 linhas

Criaremos nossa própria regra na mão, por debaixo dos panos estamos sobrescrevendo uma regra que já foi feita no script e será interpretada.

Com esse regra estamos subscrevendo a regra do tamanho da linha, e assim agora ele passará a partir de 200 linhas mostrará um warning e com 400 linhas ele mostrará o erro.

Quando buildarmos novamente percebemos que ele mostrará somente um warning pois passou de 200 caracteres por linha, e somente mostrará erro se passar de 400 caracteres por linha.

Desabilitando Regras do Swift Lint:

Para desabilitar uma das regras do Swift Lint, você deve entrar no mesmo arquivo criado, porém agora você usará o comando disable_rules: e abaixo aplicar uma das regras que listamos acima, no nosso caso queremos que o programador possa utilizar o force cast

Com esse comando a regra de correção que nos restringia de usar o Force Cast está desabilitada.

E com isso podemos perceber que agora ele aceita Force Cast, e não “reclamará” sobre essa regra que passou a ser permitida.

Nota: Algumas regras são auto corrigidas então para corrigi-las com o Lint podemos usar o comando abaixo:

swiftlint autocorrect

Adicionando regra do Force Cast

Para adicionar regra é muito simples, é somente dar o nome da regra e dentro do escopo definir como será apresentada no Xcode, se será um Warning ou um Error.

Com isso inserimos nossa primeira regra de projeto em nosso código, logo Force Casts serão alertados com Warnings.

Adicionando regra de caracteres por linhas

Com um simples comando definimos que se o desenvolvedor adicionar mais de 100 linhas em uma mesma linha ele receberá um warning

Adicionando regra do static operator

Como já estamos costumando, podemos accionar a regra como o nome da mesma, e assim explicitar um warning ou error.

Com isso pratique para adicionar as outras regras acima.

Já que chegou até aqui, espero que saiba um pouco mais sobre Swift Lint e suas aplicação, obrigado pela leitura e qualquer forma de feedback é bem vinda.

--

--

Vinicius Mangueira

I'm Mobile developer who loves to learn about new web and mobile technologies. I combine my Computer Science studies with my soft skils