Class: Klenod::Build::RubyImportRewriter
- Inherits:
-
Object
- Object
- Klenod::Build::RubyImportRewriter
- Defined in:
- lib/klenod/build/ruby_import_rewriter.rb
Defined Under Namespace
Classes: ExpandedImport, ImportCall, Result
Constant Summary collapse
- IMPORT_METHODS =
{ "import" => { replacement: "__klenod_import__", eager: true }, "lazy_import" => { replacement: "__klenod_lazy_import__", eager: false }, "import_glob" => { replacement: nil, eager: true } }.freeze
- IMPORT_SOURCE_PATTERN =
/(?<![A-Za-z0-9_])(?:import|lazy_import|import_glob)\s*(?:\(|["'])/- FAST_LITERAL_IMPORT_PATTERN =
/(?<![A-Za-z0-9_])(import|lazy_import)\s*\(\s*("(?:\\.|[^"\\#])*")\s*\)/
Instance Method Summary collapse
-
#initialize(module_id:, kind:, source_dir: nil, profiler: nil, dependency_id_offset: 0, source_line_offset: 0, source_column_offset: 0) ⇒ RubyImportRewriter
constructor
A new instance of RubyImportRewriter.
- #rewrite(code) ⇒ Object
Constructor Details
#initialize(module_id:, kind:, source_dir: nil, profiler: nil, dependency_id_offset: 0, source_line_offset: 0, source_column_offset: 0) ⇒ RubyImportRewriter
Returns a new instance of RubyImportRewriter.
42 43 44 45 46 47 48 49 50 |
# File 'lib/klenod/build/ruby_import_rewriter.rb', line 42 def initialize(module_id:, kind:, source_dir: nil, profiler: nil, dependency_id_offset: 0, source_line_offset: 0, source_column_offset: 0) @module_id = module_id @kind = kind @source_dir = source_dir && Pathname.new(source_dir). @profiler = profiler @dependency_id_offset = dependency_id_offset @source_line_offset = source_line_offset @source_column_offset = source_column_offset end |
Instance Method Details
#rewrite(code) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/klenod/build/ruby_import_rewriter.rb', line 52 def rewrite(code) return Result.new(code, [], []) unless import_source?(code) fast_result = rewrite_literal_import_calls(code) return fast_result if fast_result ast = measure(:ruby_import_parse) { SyntaxTree.parse(code) } calls = measure(:ruby_import_scan) { import_calls(ast) } = (calls) rewritten = measure(:ruby_import_rewrite_source) { rewrite_import_calls(code, ) } Result.new( rewritten, .flat_map(&:dependencies), .flat_map(&:watched_patterns) ) end |