123456789_123456789_123456789_123456789_123456789_

Class: RuboCop::Lsp::StdinRunner Private

Relationships & Source Files
Namespace Children
Exceptions:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: RuboCop::Runner
Defined in: lib/rubocop/lsp/stdin_runner.rb

Overview

Constant Summary

::RuboCop::Runner - Inherited

MAX_ITERATIONS, REDUNDANT_COP_DISABLE_DIRECTIVE_RULES

Class Method Summary

Instance Attribute Summary

::RuboCop::Runner - Inherited

#aborting=, #aborting?, #errors, #warnings, #cached_run?, #except_redundant_cop_disable_directive?,
#in_memory_corrections_possible?

Custom ruby extractors may derive their fragments from the file on disk rather than from the passed processed source, so corrections can only be kept in memory when the default extractor is used.

#project_index_disables_parallel?, #project_index_enabled?

Instance Method Summary

::RuboCop::Runner - Inherited

#run, #add_redundant_disables, #build_project_index, #bundled_gem_files, #cached_result,
#check_for_infinite_loop

Check whether a run created source identical to a previous run, which means that we definitely have an infinite loop.

#check_for_redundant_disables?, #considered_failure?, #default_config, #do_inspection_loop,
#emulate_write_read_cycle

When corrections were written to disk and read back between iterations, the text-mode write converted LF to CRLF on Windows, and cops like Layout/EndOfLine rely on seeing the source as it would be on disk.

#extract_ruby_sources, #file_finished, #file_iterator, #file_offense_cache, #file_offenses, #file_started, #find_target_files, #finished_report, #formatter_set, #get_processed_source, #inspect_file, #inspect_files, #inspect_iteration, #iterate_until_no_changes, #list_files, #mark_as_safe_by_config?, #minimum_severity_to_fail, #mobilize_cop_badge?, #mobilize_team, #mobilized_cop_classes, #offense_displayed?, #offenses_to_report, #parallel_file_iterator, #process_file, #process_remaining_report_queue, #process_report_queue_entry,
#project_index_files

The index always covers the whole project, not just the files being inspected: cross-file offenses must not depend on which files a particular run happens to include, or single-file runs (editors, CI sharding) would see different offenses than full runs.

#qualify_option_cop_names, #redundant_cop_disable_directive, #run_in_parallel?, #save_in_cache, #serial_file_iterator,
#standby_team

A Cop::Team instance is stateful and may change when inspecting.

#style_guide_cops_only?, #supports_safe_autocorrect?, #team_for_redundant_disables

Constructor Details

.new(config_store) ⇒ StdinRunner

[ GitHub ]

  
# File 'lib/rubocop/lsp/stdin_runner.rb', line 31

def initialize(config_store)
  @options = {}

  @offenses = []
  @warnings = []
  @errors = []

  @config_for_working_directory = config_store.for_pwd

  super(@options, config_store)
end

Instance Attribute Details

#config_for_working_directory (readonly)

[ GitHub ]

  
# File 'lib/rubocop/lsp/stdin_runner.rb', line 20

attr_reader :offenses, :config_for_working_directory, :processed_source

#offenses (readonly)

[ GitHub ]

  
# File 'lib/rubocop/lsp/stdin_runner.rb', line 20

attr_reader :offenses, :config_for_working_directory, :processed_source

#processed_source (readonly)

[ GitHub ]

  
# File 'lib/rubocop/lsp/stdin_runner.rb', line 20

attr_reader :offenses, :config_for_working_directory, :processed_source

Instance Method Details

#build_project_index(target_files) (private)

The project index is built from files on disk, not from the in-memory buffer, so it does not change while the user is typing. Build it once and reuse it across runs instead of re-walking and re-indexing the whole project on every request; #reset_project_index drops the cache when the on-disk state changes.

[ GitHub ]

  
# File 'lib/rubocop/lsp/stdin_runner.rb', line 78

def build_project_index(target_files)
  return if @project_index_built

  super
  @project_index_built = true
end

#do_inspection_loop(file) (private)

[ GitHub ]

  
# File 'lib/rubocop/lsp/stdin_runner.rb', line 89

def do_inspection_loop(file)
  source, offenses = super
  @processed_source = source
  [source, offenses]
end

#file_finished(_file, offenses) (private)

[ GitHub ]

  
# File 'lib/rubocop/lsp/stdin_runner.rb', line 85

def file_finished(_file, offenses)
  @offenses = offenses
end

#formatted_source

[ GitHub ]

  
# File 'lib/rubocop/lsp/stdin_runner.rb', line 59

def formatted_source
  @options[:stdin]
end

#reset_project_index

Drop the cached project index so the next run rebuilds it. Called when a file is saved or a watched file changes, i.e. when the on-disk state the index is derived from may have changed.

[ GitHub ]

  
# File 'lib/rubocop/lsp/stdin_runner.rb', line 66

def reset_project_index
  @project_index = nil
  @project_index_built = false
end

#run(path, contents, options, prism_result: nil)

Raises:

  • (Interrupt)
[ GitHub ]

  
# File 'lib/rubocop/lsp/stdin_runner.rb', line 43

def run(path, contents, options, prism_result: nil)
  @options = options.merge(DEFAULT_RUBOCOP_OPTIONS)
  @options[:stdin] = contents

  @prism_result = prism_result
  @processed_source = nil

  @offenses = []
  @warnings = []
  @errors = []

  super([path])

  raise Interrupt if aborting?
end