Class: I18nContextGenerator::Searcher

Inherits:
Object
  • Object
show all
Includes:
CommentMasking, MatchFiltering, SourceDiscovery
Defined in:
lib/i18n_context_generator/searcher.rb,
lib/i18n_context_generator/searcher/comment_masking.rb,
lib/i18n_context_generator/searcher/match_filtering.rb,
lib/i18n_context_generator/searcher/source_discovery.rb

Overview

Finds where translation keys are used in iOS and Android source code.

Defined Under Namespace

Modules: CommentMasking, MatchFiltering, SourceDiscovery Classes: DiscoveredLocalization, Match

Constant Summary collapse

IOS_TYPE_DECLARATION_PATTERN =
/\b(class|struct|enum|extension)\s+(\w+)/

Constants included from SourceDiscovery

SourceDiscovery::IOS_COMMENT_ARGUMENT_PATTERN

Instance Method Summary collapse

Methods included from SourceDiscovery

#discover_localization_entries

Constructor Details

#initialize(source_paths:, ignore_patterns:, context_lines: 15, platform: nil, swift_functions: nil) ⇒ Searcher

Returns a new instance of Searcher.



39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/i18n_context_generator/searcher.rb', line 39

def initialize(source_paths:, ignore_patterns:, context_lines: 15, platform: nil, swift_functions: nil)
  @source_paths = source_paths
  @path_policy = PathPolicy.new(ignore_patterns: ignore_patterns, roots: source_paths)
  @context_lines = context_lines
  @platform = platform || detect_platform
  @localization_syntax = LocalizationSyntax.new(swift_functions: swift_functions)

  # Cache discovered files for repeated searches
  @files_cache = nil
  @files_cache_mutex = Mutex.new
  @file_lines_cache = Concurrent::Map.new
  @searchable_file_lines_cache = Concurrent::Map.new
end

Instance Method Details

#search(key, resource_type: nil) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/i18n_context_generator/searcher.rb', line 53

def search(key, resource_type: nil)
  patterns = build_search_patterns(key, resource_type: resource_type)
  files = discover_files
  direct_matches = []

  files.each do |file|
    matches = search_file(file, patterns, key)
    direct_matches.concat(matches)
  end

  all_matches = if @platform == :ios
                  search_ios_wrapper_usages(direct_matches, files) + direct_matches
                else
                  direct_matches
                end

  filter_matches(all_matches, key)
end