Class: Woods::RubyAnalyzer::DataFlowAnalyzer
- Inherits:
-
Object
- Object
- Woods::RubyAnalyzer::DataFlowAnalyzer
- 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.
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
-
#annotate(units) ⇒ Array<ExtractedUnit>
Annotate units with data transformation metadata.
-
#initialize(parser: nil) ⇒ DataFlowAnalyzer
constructor
A new instance of DataFlowAnalyzer.
Constructor Details
#initialize(parser: nil) ⇒ DataFlowAnalyzer
Returns a new instance of DataFlowAnalyzer.
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.
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 |