Querly에서 Ruby를 grep

6034 단어 grepquerly루비

무엇이 기뻐요?



일반 grep 명령보다 Ruby 코드에 적합한 세밀한 검색이 가능합니다.

어떻게?



먼저 설치합니다.
$ gem install querly

그런 다음 querly find 명령을 실행합니다.
app/ 디렉토리의 Ruby 파일에 임의의 인수를 준 save! 메소드 호출을 검색합니다.
$ querly find 'save!(...)' app/
  app/models/tweet.rb:100:6           tweet.save!
  app/models/notification.rb:36:8               notification.save!
  app/models/notification.rb:173:8              notification.save!
  app/models/html_variant.rb:16:4           save!
  app/models/github_issue.rb:32:4           issue.save!
  app/controllers/comments_controller.rb:134:6        @comment.save!
  app/controllers/internal/users_controller.rb:127:6          MentorRelationship.new(mentee_id: mentee.id, mentor_id: @user.id).save!
  app/controllers/internal/users_controller.rb:131:6          MentorRelationship.new(mentee_id: @user.id, mentor_id: mentor.id).save!
  app/controllers/users_controller.rb:82:7          if current_user.save!
  app/controllers/giveaways_controller.rb:50:9        if @user.save!
  app/services/authorization_service.rb:68:6          user.save!
  app/services/authorization_service.rb:100:6         identity.save!
  app/labor/podcast_feed.rb:42:4            ep.save!
13 results
app/ 디렉토리의 Ruby 파일에 self 리시버로부터의 임의의 인수를 준 save! 메소드 호출을 검색합니다.
$ querly find 'self.save!(...)' app/
  app/models/html_variant.rb:16:4           save!
1 results
name= 메소드 호출 (대입)을 검색합니다.
$ querly find 'name=(...)' app/
  app/controllers/html_variants_controller.rb:20:6            @html_variant.name = @fork.name + " FORK-#{rand(10000)}"
  app/services/authorization_service.rb:61:8            user.name = auth.info.nickname
  app/services/rss_reader/assembler.rb:72:10              iframe.name = "p"
  app/services/rss_reader/assembler.rb:89:10              bq.name = "p"
  app/services/rss_reader/assembler.rb:99:10              iframe.name = "p"
  app/labor/html_cleaner.rb:18:6              el.name = "p"
6 results

인수에 String 를 지정한 name= 메소드 호출을 검색합니다.
$ querly find 'name=(:string:)' app/
  app/services/rss_reader/assembler.rb:72:10              iframe.name = "p"
  app/services/rss_reader/assembler.rb:89:10              bq.name = "p"
  app/services/rss_reader/assembler.rb:99:10              iframe.name = "p"
  app/labor/html_cleaner.rb:18:6              el.name = "p"
4 results
Article.where 메소드 호출에서 ... 인수의 패턴은 실제 예제를 참조하십시오.
(코드를 보는 것이 빠를까 )
$ querly find 'Article.where(published: :bool:, user_id: _)' app/
  app/controllers/pages_controller.rb:78:4          Article.where(user_id: ApplicationConfig["DEVTO_USER_ID"], published: true).
  app/labor/article_analytics_fetcher.rb:7:24       articles_to_check = Article.where(user_id: user_id, published: true)
2 results

* 상기는 thepracticaldev/dev.to 리포지토리에 대해 실행한 결과입니다.

원래 Querly란?



독특한 패턴 언어 에 의해 Ruby 메서드 호출 패턴을 감지하는 도구입니다.

soutaro/querly: Query Method Calls from Ruby Programs

보통은 querly.yml 라는 YAML 파일에 프로젝트 고유의 패턴을 룰화해, 자동으로 체크한다, 라고 하는 사용법을 합니다.
rules:
  - id: sample.debug_print
    pattern:
      - self.p
      - self.pp
    message: Delete debug print

자세한 것은, 이하의 기사가 참고가 됩니다.
  • 프로젝트별 규칙을 지정할 수 있는 Linter인 곳의 Querly가 매우 편리 - Islands in the byte stream
  • 자신의 발을 쏘지 않는 기술 - Qiita

  • 요약


    grep 명령보다 느리지만, 세세한 검색을 할 수 있으므로 엄청 편리합니다.
    querly find 라고 타이핑하는 것이 번거롭기 때문에, 나는 평소 ruby-grep 라는 별칭을 사용하고 있습니다.

    .bashrc
    alias ruby-grep='querly find'
    

    Rubyist 여러분, 꼭 시험해보세요!

    좋은 웹페이지 즐겨찾기