2011-03-25 6 views
2

나는 아무것도하지했습니다^⇧H은 NoMethodError 원인

/tmp/temp_textmate.Z2P0KX:30:in `<main>': undefined method `empty?' for nil:NilClass (NoMethodError) 

나는 ... 처음으로 어제 HTML 문서에 '깔끔한'를 사용하여 시도하고있어 번들의 코드 ...

#!/usr/bin/env ruby -wKU 

require ENV['TM_SUPPORT_PATH'] + '/lib/ui.rb' 
require ENV['TM_SUPPORT_PATH'] + '/lib/exit_codes.rb' 

result = `"${TM_TIDY:-tidy}" -f /tmp/tm_tidy_errors -iq -utf8 \ 
      -wrap 0 --tab-size $TM_TAB_SIZE --indent-spaces $TM_TAB_SIZE \ 
     --indent yes \ 
      ${TM_XHTML:+-asxhtml --output-xhtml yes} \ 
      ${TM_SELECTED_TEXT:+--show-body-only yes} \ 
      --enclose-text yes \ 
      --doctype strict \ 
     --wrap-php no \ 
      --tidy-mark no` 
status = $?.exitstatus 

at_exit { File.unlink('/tmp/tm_tidy_errors') } # Clean up error log 

if status == 2 # Errors 

    msg = "Errors: " + File.read('/tmp/tm_tidy_errors') 
    TextMate.exit_show_tool_tip msg 

elsif status == 1 # Warnings - use output but also display notification with warnings 

    log = File.read('/tmp/tm_tidy_errors').to_a.select do |line| 
    ! (ENV['TM_SELECTED_TEXT'] and (line.include?('Warning: missing <!DOCTYPE> declaration') or line.include?("Warning: inserting missing 'title' element"))) 
    end.join rescue nil 

    unless log.empty? 
    options = { 
     :title => "Tidy Warnings", 
     :summary => "Warnings for tidying your document (press escape to close):", 
     :log  => log 
    } 
    TextMate::UI.simple_notification(options) 
    end 

end 

if ENV['TM_SOFT_TABS'] == "YES" 
    print result 
else 
    in_pre = false 
    result.each_line do |line| 
    unless in_pre 
     tab_size = ENV["TM_TAB_SIZE"].to_i 
     space, text = /(*)(.*)/m.match(line)[1..2] 
     line = "\t" * (space.length/tab_size).floor + " " * (space.length % tab_size) + text 
    end 

    print line 

    in_pre = true if line.include?("<pre>") 
    in_pre = false if line.include?("</pre>") 
    end 
end 

는 문제의 라인은 unless log.empty?입니다.

OS X 10.6.6에서 TextMate 1.5.10 (1631)을 실행하고 있습니다. 최근에 rvm을 설치하고 기본 Ruby를 1.9.2로 업그레이드했습니다. 그러나 TextMate를 사용하여 1.8.7을 사용하면 문제가 해결되지 않았습니다. /tmp/tm_tidy_errors 파일이없는 경우 마지막에

log = File.read('/tmp/tm_tidy_errors').to_a.select do |line| ... end.join rescue nil 

rescue nillognil를 넣어 것입니다 아니면 할 수 없습니다 : 당신이 log에 할당 보면

+0

제목의 위 화살표가 고의적입니까?!? – slugster

+1

@slugster, 네, 고의적입니다. Ctrl-Shift-H는 TextMate의 Tidy에 해당하는 기본 키입니다.문제와 관련해서는 로컬에서 테스트 한 결과 아무 문제가 없었지만 명령이 Ruby로 작성되었으므로이 질문에 Ruby 태그를 추가 할 수 있습니다. Ruby에 대해 더 많은 도움을 줄 수있을만큼 잘 모르겠습니다. 내가 알 수있는 한, 명령의 나의 버전은 당신과 동일합니다. 경고를 확인하는 동안 오류가 발생하기 때문에 Tidy 설치에 문제가 있다는 것입니다. – Chuck

+0

@Chuck - 감사합니다. 제안한대로 '루비'태그를 추가했습니다. – petedickson

답변

0

, 당신은이를 볼 수 있습니다 읽혀 지거나 무엇이든지. 그런 다음 스크립트는 에서 .empty? 메서드를 호출하지만 nil 개체에는 해당 메서드가없고 스크립트가 넘어져서 종료됩니다.

당신은 rescue ''-rescue nil을 변경하거나 unless log.nil? || log.empty?unless log.empty?을 변경하여 문제를 억제 할 수 있지만 실제 문제가되지 않을 수 있습니다.

TM_TIDY 환경 변수가 있습니까? PATHtidy 명령이 있습니까? 귀하의 깔끔한 설치가 옳지 않은 것처럼 보입니다 (또는 전혀 불가능할 수도 있음). 내 OSX는 /usr/bin/tidy이고 분명히 표준입니다. 터미널에서 손으로 그 큰 tidy 명령을 실행 해보고 무슨 일이 일어나는 지보십시오.

2

나는 동일한 문제가있었습니다. 루비의 RVM 버전을 사용하기 위해 Textmate를 설정 했으므로 스크립트를 빠르게 테스트 할 수 있습니다.

내가 만든 환경 변수에 대해 "TM_RUBY"의 선택을 취소하여이 문제를 해결했습니다.

OSX와 함께 제공되는 것 이외의 루비 버전을 사용할 때/usr/bin/tidy 명령이 제대로 실행되지 않는 래퍼 인 Textmate 스크립트가 발생하는 것으로 보입니다.

라이온이 나올 때 어떻게되는지 궁금합니다. 다행히도, Textmate는이 빌드 - 인 스크립트를 다시 한 번 살펴보고 약간의 "먼지 투성이"를 줄 것입니다.

+0

좋았을 텐데. 그들은 그렇지 않았다. 3 년 후 문제가 지속됩니다. C'mon : 강력한 강력한 텍스트 편집기이며 brew 또는 macports를 사용하여 소프트웨어를 설치하자마자 바로 사용할 수 없습니까? 슬퍼... –

0

루비가 2.0.0으로 업그레이드 된 OS X 10.9.5를 실행하는 컴퓨터에서도 동일한 문제가 발생했습니다. mu가 너무 짧아서 unless log.empty?unless long.nil? || log.empty?으로 변경하는 문제를 해결했습니다. 즉 제대로 실행 깔끔한 허용,하지만 내 HTML 선택의 상단은 여전히 ​​나에게 성가신 오류를 보여주는데 :

ruby: warning: -K is specified; it is for 1.8 compatibility and may cause odd behavior 
/Applications/TextMate.app/Contents/SharedSupport/Support/lib/ui.rb:129: warning: assigned but unused variable - pid 

내가 #!/usr/bin/env ruby -wKU에서 #!/usr/bin/env ruby -wKU -W0에 스크립트의 첫 줄을 변경하여 그를 종료합니다. 분명히 문제는 여전히 보닛 아래에 있지만 도움이되지만 필수적이지는 않지만이 기능은 충분히 충분하다고 생각합니다.