From: mtsmfm@... Date: 2018-07-29T16:37:12+00:00 Subject: [ruby-core:88167] [Ruby trunk Feature#14938] Provide API to get same result as ruby -wc Issue #14938 has been updated by mtsmfm (Fumiaki Matsushima). Hmm, I tried `warn` but it doesn't work in some case: ~~~ruby #!/usr/bin/ruby require 'ripper' require 'tempfile' class Lint < Ripper def warn(*s) @results << [:warning, lineno, column, *s] end alias warning warn def results unless defined?(@results) and @results @results = [] parse end @results end end data = DATA.read result1 = nil Tempfile.create do |file| file.write(data) file.flush result1 = `ruby -wc #{file.path}` end $VERBOSE = true result2 = Lint.new(data).results.first p result1 #=> /tmp/20180729-457-smihk6:1: warning: ambiguous first argument; put parentheses or a space even after `/' operator #=> "Syntax OK\n" p result2 #=> nil __END__ a /#{ }/ ~~~ In addition, - How can I get the range of code instead of lineno and column only? - Is there any way to detect syntax error? - It seems Ripper#compile_error doesn't work ~~~ruby #!/usr/bin/ruby require 'ripper' require 'tempfile' class Lint < Ripper def compile_error(*s) @results << [:error, lineno, column, *s] end def results unless defined?(@results) and @results @results = [] parse end @results end end data = DATA.read result1 = nil Tempfile.create do |file| file.write(data) file.flush result1 = `ruby -wc #{file.path}` end $VERBOSE = true result2 = Lint.new(data).results.first p result1 #=> /tmp/20180729-461-1wcbfr4:1: syntax error, unexpected end-of-input #=> "" p result2 #=> nil __END__ def ~~~ ---------------------------------------- Feature #14938: Provide API to get same result as ruby -wc https://bugs.ruby-lang.org/issues/14938#change-73193 * Author: mtsmfm (Fumiaki Matsushima) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- I'm the author of an implementation of Ruby Language Server. Currently, it uses `RubyVM::InstructionSequence.compile` to get the result of `ruby -wc` and parses message and location by regexp. https://github.com/mtsmfm/language_server-ruby/blob/v0.11.0/lib/language_server/linter/ruby_wc.rb#L30 Do you have any plan to provide API? -- https://bugs.ruby-lang.org/ Unsubscribe: