Class: HamlLint::Tree::TagNode
- Defined in:
- lib/haml_lint/tree/tag_node.rb
Overview
Represents a tag node in a HAML document.
Instance Attribute Summary
Attributes inherited from Node
#children, #line, #parent, #type
Instance Method Summary collapse
-
#attributes_source ⇒ Hash
Returns the source code for the static and dynamic attributes of a tag.
-
#contains_script? ⇒ true, false
Returns whether this tag contains executable script (e.g. is followed by a ‘=`).
-
#dynamic_attributes_source ⇒ Hash
Returns the source code for the dynamic attributes defined in ‘…`, `(…)`, or `[…]` after a tag name.
-
#dynamic_attributes_sources ⇒ Array<String>
Computed set of attribute hashes code.
-
#has_hash_attribute?(attribute) ⇒ true, false
Returns whether this tag has a specified attribute.
-
#hash_attributes? ⇒ true, false
Whether this tag node has a set of hash attributes defined via the curly brace syntax (e.g. ‘%tag{ lang: ’en’ }‘).
-
#hash_attributes_source ⇒ String
Attributes defined after the tag name in Ruby hash brackets (‘{}`).
-
#html_attributes? ⇒ true, false
Whether this tag node has a set of HTML attributes defined via the parentheses syntax (e.g. ‘%tag(lang=en)`).
-
#html_attributes_source ⇒ String?
Attributes defined after the tag name in parentheses (‘()`).
-
#object_reference? ⇒ true, false
Whether this tag node has a set of square brackets (e.g. ‘%tag`) following it that indicates its class and ID will be to the value of the given object’s #to_key or #id method (in that order).
-
#object_reference_source ⇒ String?
Source code for the contents of the node’s object reference.
-
#parsed_attributes ⇒ ParsedRuby
The attributes given to the tag parsed into a Ruby syntax tree.
-
#parsed_script ⇒ ParsedRuby
The Ruby script contents of a tag parsed into a syntax tree.
-
#remove_inner_whitespace? ⇒ true, false
Whether this node had a ‘<` after it signifying that outer whitespace should be removed.
-
#remove_outer_whitespace? ⇒ true, false
Whether this node had a ‘>` after it signifying that outer whitespace should be removed.
-
#script ⇒ String
Returns the script source that will be evaluated to produce this tag’s inner content, if any.
-
#static_attributes_source ⇒ String
Static element attributes defined after the tag name.
-
#static_classes ⇒ Array<String>
List of classes statically defined for this tag.
-
#static_ids ⇒ Array<String>
List of ids statically defined for this tag.
-
#tag_id ⇒ String
ID of the HTML tag.
-
#tag_name ⇒ String
Name of the HTML tag.
Methods inherited from Node
#comment_configuration, #directives, #disabled?, #each, #initialize, #inspect, #keyword, #line_numbers, #lines, #next_node, #predecessor, #source_code, #subsequents, #successor, #text
Constructor Details
This class inherits a constructor from HamlLint::Tree::Node
Instance Method Details
#attributes_source ⇒ Hash
Returns the source code for the static and dynamic attributes of a tag.
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/haml_lint/tree/tag_node.rb', line 96 def attributes_source @attributes_source ||= begin _explicit_tag, static_attrs, rest = source_code.scan(/\A\s*(%[-:\w]+)?([-:\w.\#]*)(.*)/m)[0] attr_types = { '{' => [:hash, %w[{ }]], '(' => [:html, %w[( )]], '[' => [:object_ref, %w[[ ]]], } attr_source = { static: static_attrs } while rest type, chars = attr_types[rest[0]] break unless type # Not an attribute opening character, so we're done # Can't define multiple of the same attribute type (e.g. two {...}) break if attr_source[type] attr_source[type], rest = Haml::Util.balance(rest, *chars) end attr_source end end |
#contains_script? ⇒ true, false
Returns whether this tag contains executable script (e.g. is followed by a ‘=`).
32 33 34 |
# File 'lib/haml_lint/tree/tag_node.rb', line 32 def contains_script? @value[:parse] && !@value[:value].strip.empty? end |
#dynamic_attributes_source ⇒ Hash
Returns the source code for the dynamic attributes defined in ‘…`, `(…)`, or `[…]` after a tag name.
84 85 86 87 |
# File 'lib/haml_lint/tree/tag_node.rb', line 84 def dynamic_attributes_source @dynamic_attributes_source ||= attributes_source.reject { |key| key == :static } end |
#dynamic_attributes_sources ⇒ Array<String>
This has to be memoized because of a design decision in Haml 5. When
Computed set of attribute hashes code.
This is a combination of all dynamically calculated attributes from the different attribute setting syntaxes (‘…`/`(…)`), converted into Ruby code.
calling ‘DynamicAttributes#to_literal`, they mutate the “old” parameter using `String#sub!` instead of returning a new string. This means that any subsequent calls can return a nil instead of a string for that attribute, which causes any subsequent calls to the method to raise an error.
19 20 21 22 23 24 25 26 |
# File 'lib/haml_lint/tree/tag_node.rb', line 19 def dynamic_attributes_sources @dynamic_attributes_sources ||= if Gem::Version.new(Haml::VERSION) < Gem::Version.new('5') @value[:attributes_hashes] else Array(@value[:dynamic_attributes].to_literal).reject(&:empty?) end end |
#has_hash_attribute?(attribute) ⇒ true, false
Returns whether this tag has a specified attribute.
39 40 41 |
# File 'lib/haml_lint/tree/tag_node.rb', line 39 def has_hash_attribute?(attribute) hash_attributes? && existing_attributes.include?(attribute) end |
#hash_attributes? ⇒ true, false
Whether this tag node has a set of hash attributes defined via the curly brace syntax (e.g. ‘%tag{ lang: ’en’ }‘).
127 128 129 |
# File 'lib/haml_lint/tree/tag_node.rb', line 127 def hash_attributes? !dynamic_attributes_source[:hash].nil? end |
#hash_attributes_source ⇒ String
Attributes defined after the tag name in Ruby hash brackets (‘{}`).
137 138 139 |
# File 'lib/haml_lint/tree/tag_node.rb', line 137 def hash_attributes_source dynamic_attributes_source[:hash] end |
#html_attributes? ⇒ true, false
Whether this tag node has a set of HTML attributes defined via the parentheses syntax (e.g. ‘%tag(lang=en)`).
145 146 147 |
# File 'lib/haml_lint/tree/tag_node.rb', line 145 def html_attributes? !dynamic_attributes_source[:html].nil? end |
#html_attributes_source ⇒ String?
Attributes defined after the tag name in parentheses (‘()`).
156 157 158 |
# File 'lib/haml_lint/tree/tag_node.rb', line 156 def html_attributes_source dynamic_attributes_source[:html][/\A\((.*)\)\z/, 1] if html_attributes? end |
#object_reference? ⇒ true, false
Whether this tag node has a set of square brackets (e.g. ‘%tag`) following it that indicates its class and ID will be to the value of the given object’s #to_key or #id method (in that order).
179 180 181 |
# File 'lib/haml_lint/tree/tag_node.rb', line 179 def object_reference? @value[:object_ref].to_s != 'nil' end |
#object_reference_source ⇒ String?
Source code for the contents of the node’s object reference.
188 189 190 |
# File 'lib/haml_lint/tree/tag_node.rb', line 188 def object_reference_source @value[:object_ref][/\A\[(.*)\]\z/, 1] if object_reference? end |
#parsed_attributes ⇒ ParsedRuby
The attributes given to the tag parsed into a Ruby syntax tree.
195 196 197 |
# File 'lib/haml_lint/tree/tag_node.rb', line 195 def parsed_attributes HamlLint::ParsedRuby.new(HamlLint::RubyParser.new.parse(hash_attributes_source || '')) end |
#parsed_script ⇒ ParsedRuby
The Ruby script contents of a tag parsed into a syntax tree.
202 203 204 |
# File 'lib/haml_lint/tree/tag_node.rb', line 202 def parsed_script HamlLint::ParsedRuby.new(HamlLint::RubyParser.new.parse(script || '')) end |
#remove_inner_whitespace? ⇒ true, false
Whether this node had a ‘<` after it signifying that outer whitespace should be removed.
210 211 212 |
# File 'lib/haml_lint/tree/tag_node.rb', line 210 def remove_inner_whitespace? @value[:nuke_inner_whitespace] end |
#remove_outer_whitespace? ⇒ true, false
Whether this node had a ‘>` after it signifying that outer whitespace should be removed.
218 219 220 |
# File 'lib/haml_lint/tree/tag_node.rb', line 218 def remove_outer_whitespace? !!@value[:nuke_outer_whitespace] end |
#script ⇒ String
Returns the script source that will be evaluated to produce this tag’s inner content, if any.
226 227 228 |
# File 'lib/haml_lint/tree/tag_node.rb', line 226 def script (@value[:value] if @value[:parse]) || '' end |
#static_attributes_source ⇒ String
Static element attributes defined after the tag name.
73 74 75 |
# File 'lib/haml_lint/tree/tag_node.rb', line 73 def static_attributes_source attributes_source[:static] || '' end |
#static_classes ⇒ Array<String>
List of classes statically defined for this tag.
50 51 52 53 |
# File 'lib/haml_lint/tree/tag_node.rb', line 50 def static_classes @static_classes ||= static_attributes_source.scan(/\.([-:\w]+)/) end |
#static_ids ⇒ Array<String>
List of ids statically defined for this tag.
62 63 64 65 |
# File 'lib/haml_lint/tree/tag_node.rb', line 62 def static_ids @static_ids ||= static_attributes_source.scan(/#([-:\w]+)/) end |
#tag_id ⇒ String
ID of the HTML tag.
163 164 165 |
# File 'lib/haml_lint/tree/tag_node.rb', line 163 def tag_id @value[:attributes]['id'] end |
#tag_name ⇒ String
Name of the HTML tag.
170 171 172 |
# File 'lib/haml_lint/tree/tag_node.rb', line 170 def tag_name @value[:name] end |