# Coerenza del Linting

**URL:** <https://meta.discourse.org/t/linting-consistency/390104>\
**Category:** Development\
**Created:** [1 Dicembre 2025, 9:31pm UTC](https://meta.discourse.org/t/linting-consistency/390104 "2025-12-01T21:31:53Z")\
**Posts on this page:** 1\
**Showing post:** 8

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2 Dicembre 2025, 5:51pm UTC](https://meta.discourse.org/t/linting-consistency/390104/8 "2025-12-02T17:51:00Z")

</div>

> [@david](#):
>
> In effetti, il linting per temi/plugin è deliberatamente disaccoppiato dal core.

Ma sono abbastanza sicuro che quando seguo il linting fatto nel plugin, i test di linting falliscono nell’azione di github.

> [@david](#):
>
> Hai eseguito `pnpm i` nella directory del tema/plugin? È necessario per installare le sue dipendenze di linting, in modo che VSCode possa trovare la copia giusta di prettier/eslint da usare.

AHA!!! `pnpm i` sembra essere la magia che mi manca. Ho aggiunto il ‘pnpm i’ al mio script che aggiorna discourse core e quello che fa il linting. . .

Quindi ecco cosa fa il mio script:

```plaintext
if [["$ARG" == "eslint"]]
then
  # Vedi https://github.com/discourse/.github/blob/main/.github/workflows/discourse-plugin.yml
  if [-f plugin.rb]
  then
    echo "Linting directory corrente."
  else
    echo "Non su un plugin. Uso $DEFAULT_PLUGIN"
    cd $DEFAULT_PLUGIN
  fi
  echo "LINTING $(pwd)"
  #cd /home/pfaffman/src/literatecomputing/discourse-display-email
  # pnpm install
  echo "Eseguo `pnpm i`"
  pnpm -i

  echo -n ESLINT . . .
  pnpm eslint --no-error-on-unmatched-pattern {test,assets,admin/assets}/javascripts
  exit_code="?"
  if [[$exit_code -ne 0]]
  then
    echo "eslint non era contento -- $exit_code -- provo a sistemare"
    pnpm eslint --fix --no-error-on-unmatched-pattern {test,assets,admin/assets}/javascripts
    exit_code="?"
    if [[$exit_code -ne 0]]
    then
      echo "eslint era ancora scontento -- $exit_code -- gioco finito"
      exit
    fi
  fi

  echo ESLINT fatto.

  ## styllint

  echo -n STYLELINT . . .
  pnpm stylelint --allow-empty-input "assets/**/*.scss"
  exit_code="?"
    if [[$exit_code -ne 0]]
    then
      echo "stylelint è scontento. Provo a sistemare . . . "
    fi
  pnpm stylelint --fix --allow-empty-input "assets/**/*.scss"
  pnpm stylelint --allow-empty-input "assets/**/*.scss"
  exit_code="?"
    if [[$exit_code -ne 0]]
    then
      echo "stylelint è ancora scontento. questo è triste. Gioco finito."
      exit
    fi
  echo "FATTO!"

  ## fine stylelint

  ## PRETTIER

  echo -n "Prettier . . . "
  if [-n "$(find assets -type f \( -name "*.scss" -o -name "*.js" -o -name "*.gjs" -o -name "*.hbs" \) 2>/dev/null)"]; then
    #pnpm prettier --write 'assets/**/*.{scss,js,gjs,es6,hbs}'
    # echo "eseguo pnpm prettier --write --log-level warn assets/**/*.{scss,js,gjs,es6,hbs}"
    pnpm prettier --write --log-level error "assets/**/*.{scss,js,gjs,hbs}"
    if [[$? -ne 0]]
    then
      echo "prettier assets ha fatto qualcosa!!! -- $?"
      sleep 5
    fi
  fi
  if [-n "$(find admin/assets -type f \( -name "*.scss" -o -name "*.js" -o -name "*.gjs" -o -name "*.hbs" \) 2>/dev/null)"]; then
    #pnpm prettier --write 'assets/**/*.{scss,js,gjs,es6,hbs}'
    # echo "eseguo pnpm prettier --write --log-level warn admin/assets/**/*.{scss,js,gjs,hbs}"
    pnpm prettier --write --log-level log "assets/**/*.{scss,js,gjs,es6,hbs}"
    if [[$? -ne 0]]
    then
      echo "prettier admin/assets ha fatto qualcosa!!! -- $?"
      pnpm prettier --check --log-level log "assets/**/*.{scss,js,gjs,es6,hbs}"
    fi
  fi
  if [-n "$(find test -type f \( -name "*.js" -o -name "*.gjs" \) 2>/dev/null)"]; then
    #pnpm prettier --write 'assets/**/*.{scss,js,gjs,es6,hbs}'
    # echo "eseguo pnpm prettier --write --log-level warn assets/**/*.{scss,js,gjs,es6,hbs}"
    pnpm prettier --write --log-level warn "test/**/*.{js,gjs}"
    if [[$? -ne 0]]
    then
      echo "prettier test ha fatto qualcosa!!! -- $?"
      pnpm prettier --check --loglevel log "test/**/*.{js,gjs}"
    fi
  fi
  echo "Fatto con prettier"

  echo "ember-template-lint"
  pnpm ember-template-lint --fix --no-error-on-unmatched-pattern assets/javascripts admin/assets/javascripts
  exit_code="?"
    if [[$exit_code -ne 0]]
    then
      echo "fatto con ember-template-lint --fix --no-error-on-unmatched-pattern assets/javascripts -- con $exit_code"
      echo sleep 5
      sleep 5
    fi
  #bundle exec stree write Gemfile $(git ls-files '*.rb') $(git ls-files '*.rake') $(git ls-files '*.thor')
  bundle exec stree check Gemfile $(git ls-files '*.rb') $(git ls-files '*.rake') $(git ls-files '*.thor')
  exit_code="?"
    if [[$exit_code -ne 0]]
    then
      echo "stree è scontento. Provo a sistemare tra 2 secondi . .. "
      sleep 2
      echo "ecco qui!!!"
      bundle exec stree write Gemfile $(git ls-files '*.rb') $(git ls-files '*.rake') $(git ls-files '*.thor')
    fi
  bundle exec stree check Gemfile $(git ls-files '*.rb') $(git ls-files '*.rake') $(git ls-files '*.thor')
  exit_code="?"
    if [[$exit_code -ne 0]]
    then
      echo "stree è ancora scontento. questo è triste. Aspetto per renderti più triste"
      sleep 15
    fi
  echo fatto con stree

  echo "rubocop!"
  bundle exec rubocop -A $(find . -name "*.rb"|grep -v gems)
  exit_code="?"
  if [[$exit_code -ne 0]]
  then
    echo "fatto con rubocop -- $exit_code"
    sleep 15
  fi
  exit
fi

```

Ma ho anche questo, che penso funzioni quasi allo stesso modo:

```plaintext
if [["$ARG" == "lint"]]
then
  cd ~/src/discourse-repos/discourse
  find plugins/discourse-pfaffmanager/assets -type f \( -name "*.scss" -o -name "*.js" -o -name "*.gjs" -o -name "*.hbs" -o -name "*.rb" \) -exec ./bin/lint --fix {} +
  cd -
fi

```

L’unica differenza ora sembra essere che il linting del core non è contento di questo (e penso di capire perché il core lo trovi e il plugin no, e non c’è svantaggio nel correggere quelle deprecazioni prima piuttosto che dopo):

```plaintext

/home/pfaffman/src/discourse-repos/discourse/plugins/discourse-pfaffmanager/assets/javascripts/discourse/components/modal/really-delete.gjs
  2:8 error Use Glimmer components(@glimmer/component) instead of classic components(@ember/component) ember/no-classic-components

✖ 1 problema (1 errore, 0 avvisi)

```

E se uso `bin/lint` allora non devo preoccuparmi che qualcosa cambi nel linting che richieda l’aggiornamento del mio script di 54 righe. Giusto?

> [@david](#):
>
> Siamo molto attenti a mantenerlo, documentandolo nei repository theme/plugin-skeleton, e implementando le modifiche metodicamente tramite mass-pr.

Aspetta. Documentandoli _dove_ negli skeleton repository?

Mi piacerebbe avere qualche indicazione su come potrei implementare le modifiche metodicamente, anche se capisco che il mio piccolo insieme di cose non è davvero un vostro problema. . . Questo non appartiene davvero qui, ma ho provato un paio di volte a capire `mass-pr`, ma non ci sono ancora riuscito. Di solito copio periodicamente alcuni file .whatever da un pull recente dello skeleton e spero per il meglio.

E ci sono 16 di quegli script. Devo monitorare il repository ed eseguirlo ogni volta che uno di essi viene aggiornato? E parecchi temi non clonano gli skeleton quindi falliscono nel copiare i file necessari?

E diversi falliscono con qualcosa come `sed: can’t read s/default.yml/stree-compat.yml/: No such file or directory` ? perché non clonano gli skeleton repository? (Inizierò un argomento da qualche parte appropriato per questo quando ne avrò l’occasione).

---

_[View the full topic](https://meta.discourse.org/t/linting-consistency/390104)._
