2

昨日初めて HTML 文書で 'Tidy' を使ってみたところ...

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

バンドル内のコードには何もしていません...

#!/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 を使用させても問題は解決しませんでした。

4

3 に答える 3

2

私も同じ問題を抱えていました。スクリプトをすばやくテストできるように、Ruby の RVM バージョンを使用するように Textmate をセットアップしました。

作成した環境変数の「TM_RUBY」のチェックを外すことで問題を解決しました。

OSX に同梱されているもの以外の Ruby バージョンを使用している場合、/usr/bin/tidy コマンドをラッパーする Textmate スクリプトが正しく実行されていないようです。

ライオンが出たらどうなるか楽しみです。願わくば、Textmate がこれらのビルトイン スクリプトをもう一度見て、少し「ほこりを払う」ようにしてください。

于 2011-07-09T17:28:09.833 に答える
0

への割り当てを見ると、次のように表示されlogます。

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

rescue nil最後に、ファイルが存在しない場合、または読み取れない場合などに a が挿入されますnil。次に、スクリプトはメソッドを呼び出しますが、オブジェクトにはそのようなメソッドがなく、スクリプトはフォールオーバーして終了します。log/tmp/tm_tidy_errors.empty?nilnil

rescue nilに変更するrescue ''か変更unless log.empty?することで問題を抑えることができますがunless log.nil? || log.empty?、それは本当の問題ではないかもしれません。

TM_TIDY環境変数を設定していますか? あなたの中にtidyコマンドはありますPATHか?Tidy のインストールが正しくないようです (またはまったくインストールされていない可能性があります)。私のOSXにはそれが/usr/bin/tidyあり、明らかにそれが標準です。その大きなtidyコマンドをターミナルで手動で実行してみて、何が起こるか見てみましょう。

于 2011-03-25T17:49:58.370 に答える