2015-03-24 1 views
2

Pour le code suivant, qui, selon le guide de style devrait être enveloppé à 80 caractères:Comment mieux emballer Ruby optparse code et la sortie?

opts.on('--scores_min <uint>', Integer, 'Drop reads if a single position in ', 
             'the index have a quality score ', 
             'below scores_main (default= ', 
             "#{DEFAULT_SCORE_MIN})") do |o| 
    options[:scores_min] = o 
end 

La sortie résultante est:

--scores_min <uint>   Drop reads if a single position in 
           the index have a quality score 
           below scores_main (default= 
           16) 

qui enveloppe à 72 caractères et semble erroné: o (

Je veux vraiment emballé à 80 caractères et aligné comme ceci:

--scores_min <uint>   Drop reads if a single position in the 
           index have a quality score below 
           scores_min (default=16) 

Comment cela peut-il être réalisé de manière intelligente?

+1

Une grande partie de codage est le choix du programmeur. Les guides de style sont des lignes directrices, pas des règles. Je recommande de regarder le code avec un oeil critique vers la lisibilité, et si vous n'êtes toujours pas sûr, demandez à un pair de le regarder. Et lisez les guides de style car ils sont parfaits pour nous montrer les problèmes et comment penser à écrire du code pour plus de lisibilité. –

Répondre

0

Je pense donc que la solution est de suivre la Ruby Style Guide:

Lorsque vous utilisez heredocs pour les chaînes multilignes garder à l'esprit le fait que ils conservent premier espace. Il est recommandé d'utiliser une marge de pour réduire l'espace excessif.

code = <<-END.gsub(/^\s+\|/, '') 
    |def test 
    | some_method 
    | other_method 
    |end 
END 
# => "def test\n some_method\n other_method\nend\n" 

[EDIT] Dans Ruby 2.3, vous pouvez faire (même ref):

code = <<~END 
    def test 
    some_method 
    other_method 
    end 
END 
1

La solution la plus simple dans ce cas est d'empiler des paramètres comme ceci:

opts.on('--scores_min <uint>', 
     Integer, 
     "Drop reads if a single position in the ", 
     "index have a quality score below ", 
     "scores_min (default= #{DEFAULT_SCORE_MIN})") do |o| 
    options[:scores_min] = o 
end 

Cela se traduit par une sortie assez agréable:

--scores_min <uint>   Drop reads if a single position in the 
           index have a quality score below 
           scores_min (default= 16) 

Plus généralement, here docs peut le rendre plus facile à formater la sortie chaînes d'une manière qui semble bien à la fois dans le code et dans la sortie:

 # Deeply nested code 
     puts <<~EOT 
      Drop reads if a single position in the 
      index have a quality score below 
      scores_min (default= #{DEFAULT_SCORE_MIN}) 
     EOT 

Mais dans ce cas, cela ne fonctionne pas très bien puisque la chaîne de description est indentée automatiquement.