module Toml
module Merge
VERSION: String
# Base error class for Toml::Merge
class Error < Ast::Merge::Error
end
# Raised when a TOML file has parsing errors
class ParseError < Ast::Merge::ParseError
def initialize: (?String? message, ?content: String?, ?errors: Array[untyped]) -> void
end
# Raised when the template file has syntax errors
class TemplateParseError < ParseError
end
# Raised when the destination file has syntax errors
class DestinationParseError < ParseError
end
# Debug logging utility for Toml::Merge
module DebugLogger
extend Ast::Merge::DebugLogger
def self.env_var_name: () -> String
def self.env_var_name=: (String name) -> String
def self.log_prefix: () -> String
def self.log_prefix=: (String prefix) -> String
def self.enabled?: () -> bool
def self.debug: (*untyped args) -> void
def self.info: (*untyped args) -> void
def self.warning: (*untyped args) -> void
def self.time: [T] (String label) { () -> T } -> T
def self.log_node: (untyped node, ?label: String) -> void
end
# Wraps tree-sitter nodes with comment associations, line information, and signatures
class NodeWrapper
attr_reader node: untyped
attr_reader leading_comments: Array[Hash[Symbol, untyped]]
attr_reader source: String
attr_reader inline_comment: Hash[Symbol, untyped]?
attr_reader start_line: Integer
attr_reader end_line: Integer
attr_reader lines: Array[String]
def self.wrap: (
untyped? node,
Array[String] lines,
?source: String?,
?leading_comments: Array[Hash[Symbol, untyped]],
?inline_comment: Hash[Symbol, untyped]?
) -> NodeWrapper?
def initialize: (
untyped node,
lines: Array[String],
?source: String?,
?leading_comments: Array[Hash[Symbol, untyped]],
?inline_comment: Hash[Symbol, untyped]?
) -> void
def signature: () -> Array[untyped]?
def type: () -> Symbol
def type?: (Symbol | String type_name) -> bool
def table?: () -> bool
def array_of_tables?: () -> bool
def pair?: () -> bool
def comment?: () -> bool
def key: () -> String?
def value: () -> String?
def text: () -> String
def text_with_comments: () -> String
def children: () -> Array[NodeWrapper]
def child_pairs: () -> Array[NodeWrapper]
def has_children?: () -> bool
def container?: () -> bool
def table_name: () -> String?
def table_header: () -> String?
def content_lines: () -> Array[String]
def inspect: () -> String
def to_s: () -> String
private
def compute_signature: (untyped node) -> Array[untyped]?
def extract_key: (untyped node) -> String?
def extract_value: (untyped node) -> String?
def find_child_by_type: (untyped node, String type_name) -> untyped?
def collect_children: (untyped node) -> Array[NodeWrapper]
end
# Analyzes TOML file structure, extracting statements for merging
class FileAnalysis
include Ast::Merge::FileAnalyzable
attr_reader ast: untyped?
attr_reader errors: Array[untyped]
def self.find_parser_path: () -> String?
def initialize: (
String source,
?signature_generator: (^(untyped) -> (Array[untyped] | untyped | nil))?,
?parser_path: String?
) -> void
def valid?: () -> bool
def fallthrough_node?: (untyped value) -> bool
def root_node: () -> NodeWrapper?
def signature_map: () -> Hash[Array[untyped], NodeWrapper]
def tables: () -> Array[NodeWrapper]
def top_level_pairs: () -> Array[NodeWrapper]
def find_by_signature: (Array[untyped] signature) -> NodeWrapper?
def line_at: (Integer line_num) -> String?
def normalized_line: (Integer line_num) -> String?
private
def parse_toml: () -> void
def integrate_nodes: () -> Array[NodeWrapper]
def build_signature_map: () -> Hash[Array[untyped], NodeWrapper]
def extract_comments: () -> Array[Hash[Symbol, untyped]]
end
# Tracks the result of a merge operation
class MergeResult < Ast::Merge::MergeResultBase
DECISION_KEPT_TEMPLATE: Symbol
DECISION_KEPT_DEST: Symbol
DECISION_MERGED: Symbol
DECISION_ADDED: Symbol
attr_reader statistics: Hash[Symbol, Integer]
def initialize: () -> void
def add_line: (
String line,
decision: Symbol,
source: Symbol,
?original_line: Integer?
) -> void
def add_lines: (
Array[String] lines,
decision: Symbol,
source: Symbol,
?start_line: Integer?
) -> void
def add_blank_line: (?decision: Symbol, ?source: Symbol) -> void
def add_node: (
NodeWrapper node,
decision: Symbol,
source: Symbol,
analysis: FileAnalysis
) -> void
def to_toml: () -> String
def output: () -> String
def line_count: () -> Integer
def inspect: () -> String
private
def track_statistics: (Symbol decision, Symbol source) -> void
end
# Resolves conflicts between template and destination TOML content
class ConflictResolver < Ast::Merge::ConflictResolverBase
def initialize: (
FileAnalysis template_analysis,
FileAnalysis dest_analysis,
?preference: Symbol,
?add_template_only_nodes: bool,
?match_refiner: (^(Array[untyped], Array[untyped], Hash[Symbol, untyped]) -> Array[untyped])?
) -> void
private
def resolve_batch: (MergeResult result) -> void
def merge_node_lists: (
Array[NodeWrapper] template_nodes,
Array[NodeWrapper] dest_nodes,
FileAnalysis template_analysis,
FileAnalysis dest_analysis,
MergeResult result
) -> void
def build_signature_map: (Array[NodeWrapper] nodes, FileAnalysis analysis) -> Hash[Array[untyped], Array[Hash[Symbol, untyped]]]
def build_refined_matches: (Array[NodeWrapper] template_nodes, Array[NodeWrapper] dest_nodes, Hash[untyped, untyped] template_by_sig, Hash[untyped, untyped] dest_by_sig) -> Hash[NodeWrapper, NodeWrapper]
def merge_matched_nodes: (NodeWrapper template_node, NodeWrapper dest_node, FileAnalysis template_analysis, FileAnalysis dest_analysis, MergeResult result) -> void
def add_node_to_result: (NodeWrapper node, MergeResult result, Symbol source, Symbol decision, FileAnalysis analysis) -> void
def freeze_node?: (untyped node) -> bool
end
# Match refiner for TOML tables that didn't match by exact signature
class TableMatchRefiner < Ast::Merge::MatchRefinerBase
def initialize: (?threshold: Float, **untyped options) -> void
def call: (
Array[NodeWrapper] template_nodes,
Array[NodeWrapper] dest_nodes,
?Hash[Symbol, untyped] context
) -> Array[Hash[Symbol, untyped]]
private
def extract_tables: (Array[NodeWrapper] nodes) -> Array[NodeWrapper]
def compute_similarity: (NodeWrapper t_table, NodeWrapper d_table) -> Float
end
# High-level merger for TOML content
class SmartMerger < Ast::Merge::SmartMergerBase
def initialize: (
String template_content,
String dest_content,
?preference: Symbol,
?add_template_only_nodes: bool,
?match_refiner: (^(Array[untyped], Array[untyped], Hash[Symbol, untyped]) -> Array[untyped])?,
?regions: Array[Hash[Symbol, untyped]]?,
?region_placeholder: String?
) -> void
def options: () -> Hash[Symbol, untyped]
private
def analysis_class: () -> Class
def default_freeze_token: () -> String
def resolver_class: () -> Class
def result_class: () -> Class
def perform_merge: () -> MergeResult
end end end