2014-09-06 3 views
0

마당 보석은 루비 코드의 문서를 생성하는 도구입니다.루비/IRB에서 마당 문서 젬을 사용하여 코드의 통계 및 구문 분석 된 정보와 상호 작용할 수 있습니까?

명령 줄을 통해 완료되며 문서가 생성됩니다.

그러나 IRB를 통해 구문 분석 된 코드 및 통계와 상호 작용할 수 있는지 궁금합니다.

당신은 IRB에 가서 같이 야드를 호출 할 수 있습니다 : 나는 코드와 상호 작용하거나 얻을 통계를 분석 할 수없는 것 그러나

require 'yard' 
YARD 

. 예를 들어, 코드의 메소드 목록을 얻는 것이 좋을 수도 있고, 파서를 통해 메소드 목록의 객체를 가져올 수도 있습니다.

문서 도구 (http://rubydoc.info/gems/yard/YARD)

답변

2

yard을 실행 한 후 구문 분석 된 코드 개체에 액세스하려면 Architecture Overview document에 연결된 YARD::Registry 설명서를 참조하십시오. 레지스트리에있는 모든 방법을 인쇄

예 :

require 'yard' 

YARD::Registry.load! 
puts YARD::Registry.all(:method).map(&:path) 

고급 모든 문서화되지 않은 개체를 받고 그 수업 :

require 'yard' 

YARD::Registry.load! 
puts YARD::Registry.all.select {|o| o.docstring.blank? }.map(&:path) 

당신은 이외에 CodeObjects Architecture Overview에 CodeObjects 더 많은 속성을 볼 수 있습니다 YARD::CodeObjects::Base 클래스 API 문서. 그러면 쿼리 할 수있는 것에 대한 자세한 정보를 얻을 수 있습니다. introspecting 태그를 계획하는 경우 YARD::Docstring 클래스를 볼 수도 있습니다.

레지스트리를 실제로 생성하려면 (아직 yard을 실행하지 않았다면) 레지스트리 클래스를 사용하면되지만 실제로는 YARD::CLI::Yardoc.run을 사용하는 것이 좋습니다.

0

는 보석처럼 보인다 마당 소스를 찾고 그 목적에 사용하기위한 것이 아닙니다하지만 당신은 몇 가지 정보를 추출 할 수 있습니다.

require 'yard' 

stats = YARD::CLI::Stats.new 
stats.run(files) # it allows patter matching, for instance 'lib/*.rb' 
stats.all_objects # all the objects recognized by the parser 

stats.all_objects.select{|o| o.type == :method} # to get only methods 
stats.all_objects.select{|o| o.type == :class} # to get only classes 

나는 그게 너에게 충분한 지 모르지만 나는 더 깊은 수준의 정보를 얻을 수 있다고 생각하지 않는다.

+0

.run (파일)에 전달되는 매개 변수 경로와 관계없이 항상 0 통계 또는 빈 배열이 표시됩니다. – Smickie

+0

YARD는 프로그래밍 방식으로 사용되어야합니다. 해당 유스 케이스에 대한 전체 API 및 가이드가 있습니다. http://rubydoc.info/gems/yard/YARD/Registry –

0

정말 당신이 무엇을해야하는지에 따라 달라집니다,하지만 난 강력하게 당신이 위대한 일을 수행 할 수 있습니다 그 pry 살펴 보도록하는 것이 좋습니다 :

[1] pry(main)> require 'cgi' 
=> true 
[2] pry(main)> show-method CGI::escape 

From: /home/carlesso/.rbenv/versions/2.1.2/lib/ruby/2.1.0/cgi/util.rb @ line 7: 
Owner: CGI::Util 
Visibility: public 
Number of lines: 6 

def escape(string) 
    encoding = string.encoding 
    string.b.gsub(/([^ a-zA-Z0-9_.-]+)/) do |m| 
    '%' + m.unpack('H2' * m.bytesize).join('%').upcase 
    end.tr(' ', '+').force_encoding(encoding) 
end 

더욱 이상한 물건 :

[4] pry(main)> cd CGI 
[5] pry(CGI):1> ls 
constants: 
    Cookie CR EOL HtmlExtension HTTP_STATUS InvalidEncoding LF MAX_MULTIPART_COUNT MAX_MULTIPART_LENGTH NEEDS_BINMODE PATH_SEPARATOR QueryExtension REVISION Util 
Object.methods: yaml_tag 
CGI::Util#methods: 
    escape escapeElement escapeHTML escape_element escape_html h pretty rfc1123_date unescape unescapeElement unescapeHTML unescape_element unescape_html 
CGI.methods: accept_charset accept_charset= parse 
CGI#methods: accept_charset header http_header nph? out print 
class variables: @@accept_charset 
locals: _ __ _dir_ _ex_ _file_ _in_ _out_ _pry_ 

edit CGI::escape과 같은 파일을 편집하여 $EDITOR 관련 파일/행을 열 수 있습니다 (내 경우에는 vim이 .rbenv/versions/2.1.2/lib/ruby/2.1.0/cgi/util.rb 행 7에 열림)

도움이 표시됩니다 현재

: 다시

[10] pry(CGI):1> help Pry.hist 
Usage: hist [--head|--tail] 
     hist --all 
     hist --head N 
     hist --tail N 
     hist --show START..END 
     hist --grep PATTERN 
     hist --clear 
     hist --replay START..END 
     hist --save [START..END] FILE 
Aliases: history 

Show and replay Readline history. 

    -a, --all    Display all history 
    -H, --head    Display the first N items 
    -T, --tail    Display the last N items 
    -s, --show    Show the given range of lines 
    -G, --grep    Show lines matching the given pattern 
    -c, --clear   Clear the current session's history 
    -r, --replay   Replay a line or range of lines 
     --save    Save history to a file 
    -e, --exclude-pry  Exclude Pry commands from the history 
    -n, --no-numbers  Omit line numbers 
    -h, --help    Show this message. 

그러나, 그것은 정말

.. .methods.instance_variables.constants 유용 할 수있는 것처럼, 당신을 도울 수, 필요에 "메타 프로그래밍"을 조금 달려있다
+0

예, 생각했지만, 모든 클래스를 가져 와서 분류하고, 코드 주석을 봅니다. 설명/매개 변수를 가져옵니다. 특히 야드 통계와 조작하려는 정보입니다. – Smickie