2 votes

Pourquoi le cop de Rails/FilePath de rubocop recommande-t-il Rails.root.join ?

J'ai la ligne suivante dans mon code :

require "#{Rails.root}/config/environments/production.rb"

Le vérificateur de code Rubocop recommande que je le change en :

require Rails.root.join('config', 'environments', 'production.rb')

Pourquoi? Le premier est plus compact, semble plus rapide et est peut-être plus lisible.

3voto

Axe Points 338

De manuel de Rubocop

Ce policier est utilisé pour identifier les utilisations du processus de jointure de chemin de fichier pour utiliser la clause Rails.root.join. Ceci est pour éviter les bugs sur les systèmes d'exploitation qui n'utilisent pas '/' comme séparateur de chemin.

2voto

Mickey Sheu Points 650

Je pense que c'est simplement une approche "choisissons un style". Je ne vois pas de discussion significative lorsque l'idée a été proposée.

2voto

CodeSmith Points 749

Comme d'autres l'ont mentionné, RuboCop recommande de faire cela pour éviter des problèmes avec les systèmes d'exploitation n'utilisant pas / comme séparateur de chemin. L'équipe de RuboCop a ajouté des clarifications après que cette question a été posée (comme vu sur https://github.com/bbatsov/rubocop/pull/5571/files).

Ceci étant dit, je ne suis pas sûr que ce contrôleur soit nécessaire. D'après d'autres fils SO, comme slash and backslash in Ruby, il semble que Ruby fait un bon travail de conversion automatique des chemins en arrière-plan (lorsque le code est exécuté en Ruby). Dans les cas où les chemins sont transmis à des systèmes externes, les gens seront probablement très spécifiques sur la structure du chemin.

1voto

user3309314 Points 1148

C'est un paramètre par défaut. Vous pouvez en savoir plus sur les options ici

Vous pouvez le modifier en utilisant le fichier .rubocop.yml. Voici un exemple, jetez un coup d'œil à la fin du fichier.

inherit_from: .rubocop_todo.yml

AllCops:
  DisplayCopNames: true

  Exclude:
    - bin/**/*
    - db/schema.rb
    - node_modules/**/*

  TargetRubyVersion: 2.3

Metrics/LineLength:
  Max: 120

Metrics/MethodLength:
  Exclude:
    - test/**/*

Rails:
  Enabled: true

Rails/FilePath:
  Enabled: false

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X