⌃⇧Н в TextMate для 'Tidy' HTML вызывает NoMethodError - PullRequest
2 голосов
/ 25 марта 2011

Вчера я впервые попробовал использовать 'Tidy' в HTML-документе и получил ...

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

Я ничего не сделал с кодом в комплекте ...

<code>#!/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?("
") конец конец

Строка проблемы unless log.empty?.

Я использую TextMate 1.5.10 (1631) в OS X 10.6.6. Недавно я установил rvm и обновил Ruby по умолчанию до 1.9.2, хотя принуждение TextMate к использованию 1.8.7 не устранило проблему.

Ответы [ 3 ]

2 голосов
/ 09 июля 2011

У меня была такая же проблема. Я настроил свой TextMate для использования RVM-версии ruby, чтобы я мог быстро тестировать сценарии.

Я решил проблему, сняв флажок «TM_RUBY» для переменной среды, которую я создал.

Похоже, что сценарии Textmate, которые обертывают команду / usr / bin / tidy, не выполняются должным образом при использовании версии ruby, отличной от той, которая поставляется с OSX.

Мне любопытно посмотреть, что происходит, когда выходит Лев. Надеемся, что Textmate еще раз рассмотрит эти встроенные скрипты и немного «отряхнет» их.

0 голосов
/ 14 января 2015

У меня тоже была такая же проблема, на машине под управлением OS X 10.9.5 с Ruby, обновленным до ruby ​​2.0.0.Исправлена ​​ошибка, из-за которой у mu слишком короткое предложение изменить unless log.empty? на unless long.nil? || log.empty?.Это позволило Tidy работать должным образом, но верхняя часть моего выбора 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,Очевидно, что проблемы все еще есть под капотом, но для чего-то полезного, но не существенного, поскольку эта функциональность, я думаю, достаточно хороша.

0 голосов
/ 25 марта 2011

Если вы посмотрите на присвоение log, вы увидите это:

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

rescue nil в конце поместит nil в log, если файл /tmp/tm_tidy_errors отсутствует или его невозможно прочитать или что-либо еще. Затем сценарий вызовет метод .empty? для nil, но объект nil не имеет такого метода, и сценарий падает и умирает.

Вы можете устранить проблему, изменив rescue nil на rescue '' или изменив unless log.empty? на unless log.nil? || log.empty?, но это не может быть реальной проблемой.

У вас установлена ​​TM_TIDY переменная окружения? Есть ли в вашем PATH команда tidy? Похоже, что ваша установка Tidy не правильная (или, возможно, вообще отсутствует). У моего OSX /usr/bin/tidy и, видимо, это стандартно. Попробуйте вручную выполнить эту большую команду tidy в терминале и посмотрите, что произойдет.

...