class Solargraph::LanguageServer::Message::TextDocument::Formatting
Public Instance Methods
process()
click to toggle source
# File lib/solargraph/language_server/message/text_document/formatting.rb, line 13 def process file_uri = params['textDocument']['uri'] config = config_for(file_uri) original = host.read_text(file_uri) args = cli_args(file_uri, config) require_rubocop(config['version']) options, paths = RuboCop::Options.new.parse(args) options[:stdin] = original corrections = redirect_stdout do RuboCop::Runner.new(options, RuboCop::ConfigStore.new).run(paths) end result = options[:stdin] log_corrections(corrections) format original, result rescue RuboCop::ValidationError, RuboCop::ConfigNotFoundError => e set_error(Solargraph::LanguageServer::ErrorCodes::INTERNAL_ERROR, "[#{e.class}] #{e.message}") end
Private Instance Methods
cli_args(file_uri, config)
click to toggle source
# File lib/solargraph/language_server/message/text_document/formatting.rb, line 54 def cli_args file_uri, config file = UriHelpers.uri_to_file(file_uri) args = [ config['cops'] == 'all' ? '--autocorrect-all' : '--autocorrect', '--cache', 'false', '--format', formatter_class(config).name, ] ['except', 'only'].each do |arg| cops = cop_list(config[arg]) args += ["--#{arg}", cops] if cops end args += config['extra_args'] if config['extra_args'] args + [file] end
config_for(file_uri)
click to toggle source
# File lib/solargraph/language_server/message/text_document/formatting.rb, line 47 def config_for(file_uri) conf = host.formatter_config(file_uri) return {} unless conf.is_a?(Hash) conf['rubocop'] || {} end
cop_list(value)
click to toggle source
# File lib/solargraph/language_server/message/text_document/formatting.rb, line 81 def cop_list(value) value = value.join(',') if value.respond_to?(:join) return nil if value == '' || !value.is_a?(String) value end
format(original, result)
click to toggle source
@param original [String] @param result [String] @return [void]
# File lib/solargraph/language_server/message/text_document/formatting.rb, line 90 def format original, result ending = if original.end_with?("\n") { line: original.lines.length, character: 0 } elsif original.lines.empty? { line: 0, character: 0 } else { line: original.lines.length - 1, character: original.lines.last.length } end set_result( [ { range: { start: { line: 0, character: 0 }, end: ending }, newText: result } ] ) end
formatter_class(config)
click to toggle source
# File lib/solargraph/language_server/message/text_document/formatting.rb, line 71 def formatter_class(config) if self.class.const_defined?('BlankRubocopFormatter') BlankRubocopFormatter else require_rubocop(config['version']) klass = Class.new(::RuboCop::Formatter::BaseFormatter) self.class.const_set 'BlankRubocopFormatter', klass end end
log_corrections(corrections)
click to toggle source
# File lib/solargraph/language_server/message/text_document/formatting.rb, line 36 def log_corrections(corrections) corrections = corrections&.strip return if corrections&.empty? Solargraph.logger.info('Formatting result:') corrections.each_line do |line| next if line.strip.empty? Solargraph.logger.info(line.strip) end end