Class: Woods::RubyAnalyzer::DataFlowAnalyzer

Inherits:
Object
  • Object
show all
Defined in:
lib/woods/ruby_analyzer/dataflow_analyzer.rb

Overview

Annotates existing ExtractedUnit objects with data transformation metadata.

Conservative v1: detects common data transformation patterns by scanning for specific method calls that indicate construction, serialization, or deserialization.

Examples:

analyzer = RubyAnalyzer::DataFlowAnalyzer.new
analyzer.annotate(units)
units.first.[:data_transformations]
#=> [{ method: "to_json", category: :serialization, line: 5 }]

Constant Summary collapse

CONSTRUCTION_METHODS =
%w[new].freeze
SERIALIZATION_METHODS =
%w[to_h to_json to_a serialize as_json].freeze
DESERIALIZATION_METHODS =
%w[from_json parse].freeze
CATEGORY_BY_METHOD =
[
  *CONSTRUCTION_METHODS.map { |m| [m, :construction] },
  *SERIALIZATION_METHODS.map { |m| [m, :serialization] },
  *DESERIALIZATION_METHODS.map { |m| [m, :deserialization] }
].to_h.freeze

Instance Method Summary collapse

Constructor Details

#initialize(parser: nil) ⇒ DataFlowAnalyzer

Returns a new instance of DataFlowAnalyzer.

Parameters:

  • parser (Ast::Parser, nil) (defaults to: nil)

    Parser instance (creates default if nil)



31
32
33
34
# File 'lib/woods/ruby_analyzer/dataflow_analyzer.rb', line 31

def initialize(parser: nil)
  @parser = parser || Ast::Parser.new
  @call_site_extractor = Ast::CallSiteExtractor.new
end

Instance Method Details

#annotate(units) ⇒ Array<ExtractedUnit>

Annotate units with data transformation metadata.

Mutates each unit’s metadata hash by adding a :data_transformations key.

Parameters:

Returns:



42
43
44
45
46
47
48
49
# File 'lib/woods/ruby_analyzer/dataflow_analyzer.rb', line 42

def annotate(units)
  units.each do |unit|
    next unless unit.source_code

    transformations = detect_transformations(unit.source_code)
    unit.[:data_transformations] = transformations
  end
end