Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Improve the performance using the hints by rubocop-performance and fasterer

Ouverte
#33 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

@anew-bhav y travaille déjà.

Depuis le 31/5/2021.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
38/100
Type d'issue
Refactorisation
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
ruby
Domaine
performance

Piste de recherche

Commencez par les fichiers et les emplacements de lignes indiqués dans les rapports de rubocop-performance et fasterer, en particulier les fichiers parser, XPath, quickpath, node, element et doctype. Exécutez les deux outils sur le projet et examinez chaque modification suggérée afin de préserver le comportement. C’est terminé lorsque les infractions signalées sont corrigées et que les vérifications existantes réussissent toujours.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

rubocop-performance (see https://github.com/rubocop-hq/rubocop-performance ) says:

Offenses:

/usr/lib/ruby/2.7.0/rexml/attlistdecl.rb:45:7: C: Performance/InefficientHashSearch: Use #key? instead of #keys.include?.
      @pairs.keys.include? key
      ^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/doctype.rb:201:7: C: Performance/RegexpMatch: Use match? instead of =~ when MatchData is not used.
      quoted_string =~ /^[\'\"].*[\'\"]$/ ?
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/element.rb:255:43: C: Performance/RegexpMatch: Use match? instead of =~ when MatchData is not used.
        prefix = "xmlns:#{prefix}" unless prefix =~ /^xmlns:/
                                          ^^^^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/entity.rb:44:12: C: Performance/RegexpMatch: Use match? instead of =~ when MatchData is not used.
        if stream[2] =~ /SYSTEM|PUBLIC/
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/node.rb:56:9: C: Performance/RedundantBlockCall: Use yield instead of block.call.
        block.call(node)
        ^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/node.rb:65:24: C: Performance/RedundantBlockCall: Use yield instead of block.call.
        return node if block.call(node)
                       ^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/parseexception.rb:32:67: C: Performance/StringReplacement: Use tr instead of gsub.
        err << @source.buffer[0..80].force_encoding("ASCII-8BIT").gsub(/\n/, ' ')
                                                                  ^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/parsers/baseparser.rb:476:25: C: Performance/RegexpMatch: Use match? instead of =~ when MatchData is not used.
        return false if /\AUTF-16\z/i =~ xml_declaration_encoding
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/parsers/pullparser.rb:73:29: C: Performance/RegexpMatch: Use match? instead of =~ when MatchData is not used.
            event[2] unless event[2] =~ /PUBLIC|SYSTEM/
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/parsers/treeparser.rb:81:54: C: Performance/RegexpMatch: Use match? instead of =~ when MatchData is not used.
              entities[ event[1] ] = event[2] unless event[2] =~ /PUBLIC|SYSTEM/
                                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/parsers/xpathparser.rb:304:14: C: Performance/RegexpMatch: Use match? instead of !~ when MatchData is not used.
          if path !~ /^\s*\)/
             ^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/parsers/xpathparser.rb:539:41: C: Performance/RegexpMatch: Use match? instead of =~ when MatchData is not used.
        rest = LocationPath(rest, n) if rest =~ /\A[\/\.\@\[\w*]/
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/quickpath.rb:108:49: C: Performance/RegexpMatch: Use match? instead of =~ when MatchData is not used.
      matches = filter( elements.dup, rest ) if axe_name =~ /-or-self$/u
                                                ^^^^^^^^^^^^^^^^^^^^^^^^

49 files inspected, 13 offenses detected


fasterer (see https://github.com/DamirSvrtan/fasterer) says:

validation/relaxng.rb:416 Calling argumentless methods within blocks is slower than using symbol to proc.
validation/relaxng.rb:523 Calling argumentless methods within blocks is slower than using symbol to proc.

parsers/xpathparser.rb:602 For loop is slower than using each.

parsers/baseparser.rb:381 For loop is slower than using each.

formatters/default.rb:70 Calling argumentless methods within blocks is slower than using symbol to proc.

xpath_parser.rb:105 For loop is slower than using each.
xpath_parser.rb:120 For loop is slower than using each.
xpath_parser.rb:458 Enumerable#sort is slower than Enumerable#sort_by.
xpath_parser.rb:590 Using each_with_index is slower than while loop.

quickpath.rb:88 Calling argumentless methods within blocks is slower than using symbol to proc.
quickpath.rb:133 Calling argumentless methods within blocks is slower than using symbol to proc.
quickpath.rb:135 Calling argumentless methods within blocks is slower than using symbol to proc.
quickpath.rb:138 Calling argumentless methods within blocks is slower than using symbol to proc.

node.rb:54 Calling blocks with call is slower than yielding.
node.rb:63 Calling blocks with call is slower than yielding.

functions.rb:42 Calling argumentless methods within blocks is slower than using symbol to proc.

element.rb:1068 Hash#fetch with second argument is slower than Hash#fetch with block.
element.rb:1075 Hash#fetch with second argument is slower than Hash#fetch with block.
element.rb:1128 Hash#fetch with second argument is slower than Hash#fetch with block.
element.rb:1212 Hash#fetch with second argument is slower than Hash#fetch with block.
element.rb:1246 Calling argumentless methods within blocks is slower than using symbol to proc.

doctype.rb:283 Use attr_reader for reading ivars.

49 files inspected, 22 offenses detected

Langage dominant
Ruby
Étoiles
181
Forks
104
Merge moyen
11 h 3 min
PR mergées (30 j)
1

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de ruby/rexml

Toutes les issues de ruby/rexml

Issues similaires

Plus d'issues Ruby

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.