Module: Canopus::Workspace::ProjectSearchable
- Defined in:
- lib/canopus/workspace/project_searchable.rb
Instance Method Summary collapse
- #cancel_project_search ⇒ Object
- #replace_in_buffer(pattern, replacement, **options) ⇒ Object
-
#search_project(query, regexp: false, case_sensitive: true, whole_word: false, async: true) ⇒ Object
Capture immutable open-buffer snapshots on the foreground.
Instance Method Details
#cancel_project_search ⇒ Object
28 29 30 31 32 33 34 35 36 |
# File 'lib/canopus/workspace/project_searchable.rb', line 28 def cancel_project_search prepared = (@search_prepare_lock ||= Mutex.new).synchronize do @search_generation = (@search_generation || 0) + 1 saved, @search_prepared = @search_prepared, nil saved end prepared&.close nil end |
#replace_in_buffer(pattern, replacement, **options) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/canopus/workspace/project_searchable.rb', line 38 def replace_in_buffer(pattern, replacement, **) if editor.buffer.is_a?(MultiBuffer) changes = editor.replacement_edits(pattern, replacement, **).select do |range, _text| editor.buffer.excerpts.any? { |excerpt| range.begin >= excerpt.view_start && range.end <= excerpt.view_end } end editor.edit(changes, kind: :replace_all) changes.length else editor.replace_all(pattern, replacement, **) end end |
#search_project(query, regexp: false, case_sensitive: true, whole_word: false, async: true) ⇒ Object
Capture immutable open-buffer snapshots on the foreground. File IO, scanning and the complete private result Editor are prepared off-thread.
17 18 19 20 21 22 23 24 25 26 |
# File 'lib/canopus/workspace/project_searchable.rb', line 17 def search_project(query, regexp: false, case_sensitive: true, whole_word: false, async: true) raise Error, "Workspace closed" if @closed raise Error, "Search query cannot be empty" if query.empty? expression = regexp ? query : Regexp.escape(query) expression = "\\b(?:#{expression})\\b" if whole_word pattern = Regexp.new(expression, case_sensitive ? 0 : Regexp::IGNORECASE, timeout: 0.25) cancel_project_search @message = "Searching project…" if async prepare_project_search(pattern, @search_generation, search_sources, settings: search_editor_settings, async: async) end |