Class: Markdown::Merge::ProviderBackend
- Inherits:
-
Object
- Object
- Markdown::Merge::ProviderBackend
- Defined in:
- lib/markdown/merge/source_preserving_provider.rb,
sig/markdown/merge.rbs
Overview
Parser adapter used by the conservative Markdown provider. Backends supply native AST facts; the provider owns all source-range and merge policy. rubocop:disable Metrics/AbcSize, Metrics/ClassLength, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity -- backend ASTs expose materially different heading facts
Defined Under Namespace
Classes: Heading
Instance Attribute Summary collapse
-
#dialects ⇒ Array[Symbol]
readonly
Returns the value of attribute dialects.
-
#id ⇒ Symbol
readonly
Returns the value of attribute id.
-
#package ⇒ String
readonly
Returns the value of attribute package.
Class Method Summary collapse
- .native_headings(root, source, kramdown: false) ⇒ Array[ProviderBackend::Heading]
- .tree_sitter_headings(root, _source) ⇒ Array[ProviderBackend::Heading]
Instance Method Summary collapse
-
#initialize(id:, package:, dialects:, parser:, headings:) ⇒ ProviderBackend
constructor
A new instance of ProviderBackend.
- #parse(source) ⇒ [untyped, Array[ProviderBackend::Heading]]
Constructor Details
#initialize(id:, package:, dialects:, parser:, headings:) ⇒ ProviderBackend
Returns a new instance of ProviderBackend.
16 17 18 19 20 21 22 |
# File 'lib/markdown/merge/source_preserving_provider.rb', line 16 def initialize(id:, package:, dialects:, parser:, headings:) @id = id.to_sym @package = package @dialects = dialects.map(&:to_sym).freeze @parser = parser @headings = headings end |
Instance Attribute Details
#dialects ⇒ Array[Symbol] (readonly)
Returns the value of attribute dialects.
14 15 16 |
# File 'lib/markdown/merge/source_preserving_provider.rb', line 14 def dialects @dialects end |
#id ⇒ Symbol (readonly)
Returns the value of attribute id.
14 15 16 |
# File 'lib/markdown/merge/source_preserving_provider.rb', line 14 def id @id end |
#package ⇒ String (readonly)
Returns the value of attribute package.
14 15 16 |
# File 'lib/markdown/merge/source_preserving_provider.rb', line 14 def package @package end |
Class Method Details
.native_headings(root, source, kramdown: false) ⇒ Array[ProviderBackend::Heading]
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/markdown/merge/source_preserving_provider.rb', line 36 def native_headings(root, source, kramdown: false) root.children.filter_map do |node| next unless node.type.to_s == 'heading' start_line = point_row(node.start_point) end_line = point_row(node.end_point) level = node.header_level.to_i text = node.text.to_s.chomp style = if kramdown kramdown_atx?(node, source, start_line, level, text) ? :atx : :setext else start_line == end_line ? :atx : :setext end Heading.new(level: level, text: text, start_line: start_line, end_line: end_line, style: style) end end |
.tree_sitter_headings(root, _source) ⇒ Array[ProviderBackend::Heading]
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/markdown/merge/source_preserving_provider.rb', line 53 def tree_sitter_headings(root, _source) document_section_headings(root).filter_map do |node| type = node.type.to_s level = atx_level(node) if level Heading.new( level: level, text: heading_inline_text(node), start_line: point_row(node.start_point), end_line: point_row(node.end_point), style: :atx ) elsif type.start_with?('setext_') && type.end_with?('_heading') Heading.new( level: type.include?('h1') ? 1 : 2, text: heading_inline_text(node), start_line: point_row(node.start_point), end_line: point_row(node.end_point), style: :setext ) end end end |
Instance Method Details
#parse(source) ⇒ [untyped, Array[ProviderBackend::Heading]]
24 25 26 27 28 29 30 31 32 33 |
# File 'lib/markdown/merge/source_preserving_provider.rb', line 24 def parse(source) tree = @parser.call(source) root = tree.root_node raise TreeHaver::NotAvailable, 'Markdown parser returned no root node' unless root if root.respond_to?(:has_error?) && root.has_error? raise TreeHaver::NotAvailable, 'Markdown parser reported a syntax error' end [root, @headings.call(root, source)] end |