Configuração de linting

Estou vendo uma diferença significativa na configuração padrão de linting e na forma como ela deveria funcionar.

A configuração padrão instala o pacote eslint-config-discourse como uma dependência de desenvolvimento:
https://www.npmjs.com/package/eslint-config-discourse

No entanto, quando procuro o código-fonte em https://github.com/discourse/eslint-config-discourse, o repositório é redirecionado para @discourse/lint-configs, que também é um pacote dentro do monorepo eslint-config-discourse. Com os testes incluídos, eslint-config-discourse deveria ser um wrapper, mas não está funcionando como deveria, pelo menos não na minha experiência:

Configuração Padrão de Linting

  1. Crie um novo tema usando o comando discourse_theme new.
  2. Revise a configuração de linting gerada:
    a. .eslintrc
    {
      "extends": "eslint-config-discourse",
      "globals": {
        "settings": "readonly",
        "themePrefix": "readonly"
      }
    }
    
    b. .template-lintrc.js:
    module.exports = {
      plugins: ["ember-template-lint-plugin-discourse"],
      extends: "discourse:recommended",
    };
    
    c. package.json
    {
      "license": "MIT",
      "devDependencies": {
        "eslint-config-discourse": "latest"
      }
    }
    
  3. Execute o Prettier no pacote e ele reclamará sobre os arquivos *.gjs:
    yarn prettier --check --write "{common,javascripts,desktop,mobile,test,scss}/**/*.{js,gjs,es6,scss}"
    
    Error: No parser could be inferred for file ... .gjs

Configurar @discourse/lint-configs Diretamente

https://www.npmjs.com/package/@discourse/lint-configs

  1. Execute yarn remove -D eslint-config-discourse para desinstalar o pacote.
  2. Execute yarn add -D @discourse/lint-configs para instalar como dependência de desenvolvimento.
  3. Siga as instruções para criar os arquivos de configuração de linting:
    a. Substitua o arquivo .eslintrc por .eslintrc.cjs
    module.exports = require("@discourse/lint-configs/eslint-theme");
    
    b. Adicione o arquivo .prettierrc.cjs:
    module.exports = require("@discourse/lint-configs/prettier");
    
    c. Substitua o arquivo .template-lintrc.js por .template-lintrc.cjs:
    module.exports = require("@discourse/lint-configs/template-lint");
    
  4. Tente executar o Prettier novamente e observe que ele funciona sem erros:
    $ yarn prettier --check --write "{common,javascripts,desktop,mobile,test,scss}/**/*.{js,gjs,es6,scss}"
    Checking formatting...
    All matched files use Prettier code style!
    ✨  Done in 0.46s.
    

Então, devo presumir que o CLI discourse_theme está desatualizado e, daqui para frente, devo usar a opção @discourse/lint-configs nos meus projetos?

Não. Confie nisso. Envie para o seu repositório e veja os comandos de linting quando o seu falhar em passar.

1 curtida

Olá @pfaffman,

Fiz um pequeno teste no meu repositório. Enquanto ambos os casos passam na conclusão, a configuração padrão gera um erro para o arquivo GJS, e ele não é escaneado.

Na segunda abordagem, o arquivo GJS é reconhecido e verificado com sucesso.

Por favor, compare as ações do branch main com as ações do branch linting; eu só introduzi as configurações da segunda opção no branch linting:

main:
https://github.com/gormus/discourse-filtered-topic-lists/actions/runs/10325377606/job/28586838134?pr=1#step:6:19

linting:
https://github.com/gormus/discourse-filtered-topic-lists/actions/runs/10333473217/job/28605865585?pr=3#step:6:17

Não deveria. A versão mais recente da CLI do discourse_theme clonará GitHub - discourse/discourse-theme-skeleton: Template for Discourse themes e a adaptará com base nas suas entradas. Isso usa @discourse/lint-configs

As instruções de atualização estão aqui:

4 curtidas

Obrigado, era isso. Agora consigo obter uma versão (anteriormente eu não obtinha a versão):

discourse_theme --version
2.1.2

…e uma lista de comandos atualizada:

discourse_theme --help
Usage: discourse_theme COMMAND [DIR] [OPTIONS]

Commands:
  new DIR               - Cria um novo tema no diretório especificado.
  download DIR          - Baixa um tema do servidor e o armazena no diretório especificado.
  upload DIR            - Envia o tema do diretório especificado para o Discourse.
  watch DIR             - Observa o tema no diretório especificado e sincroniza quaisquer alterações com o Discourse.
  rspec DIR [OPTIONS]   - Executa os testes RSpec no diretório especificado. Os testes podem ser executados usando um repositório Discourse local ou um contêiner Docker.
    --headful           - Executa os testes de tipo de sistema RSpec no modo headful. Aplica-se a ambos os modos.

    Se o diretório especificado foi configurado para ser executado em um contêiner Docker, as opções adicionais são suportadas.
    --rebuild           - Força a reconstrução do contêiner Docker.
    --verbose           - Executa o comando para preparar o contêiner Docker em modo verbose.

Global Options:
  --reset               - Redefine a configuração para o diretório especificado.

e, claro, o esqueleto gerado é mais novo. :smiley:

5 curtidas

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.