Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ Metrics/AbcSize:
- lib/herb/project.rb
- lib/herb/engine.rb
- lib/herb/engine/**/*.rb
- lib/herb/token.rb
- templates/template.rb
- test/fork_helper.rb
- test/snapshot_utils.rb
Expand Down
1 change: 1 addition & 0 deletions lib/herb.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# frozen_string_literal: true
# typed: false

require_relative "herb/colors"
require_relative "herb/range"
require_relative "herb/position"
require_relative "herb/location"
Expand Down
82 changes: 82 additions & 0 deletions lib/herb/colors.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# frozen_string_literal: true
# typed: true

# rbs_inline: enabled

module Herb
module Colors
module_function

#: () -> bool
def enabled?
return false if ENV["NO_COLOR"]
return false if defined?(IRB)
return false if defined?(Minitest)

$stdout.tty?
end

#: (String) -> String
def white(string)
return string unless enabled?

"\e[37m#{string}\e[0m"
end

#: (String) -> String
def yellow(string)
return string unless enabled?

"\e[33m#{string}\e[0m"
end

#: (String) -> String
def green(string)
return string unless enabled?

"\e[32m#{string}\e[0m"
end

#: (String) -> String
def red(string)
return string unless enabled?

"\e[31m#{string}\e[0m"
end

#: (String) -> String
def magenta(string)
return string unless enabled?

"\e[35m#{string}\e[0m"
end

#: (String) -> String
def cyan(string)
return string unless enabled?

"\e[36m#{string}\e[0m"
end

#: (String) -> String
def bright_magenta(string)
return string unless enabled?

"\e[95m#{string}\e[0m"
end

#: (String) -> String
def dimmed(string)
return string unless enabled?

"\e[2m#{string}\e[0m"
end

#: (String) -> String
def bold(string)
return string unless enabled?

"\e[1m#{string}\e[0m"
end
end
end
4 changes: 2 additions & 2 deletions lib/herb/location.rb
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,12 @@ def to_json(state = nil)

#: () -> String
def tree_inspect
%((location: #{start.tree_inspect}-#{self.end.tree_inspect}))
"#{start.tree_inspect}-#{self.end.tree_inspect}"
end

#: () -> String
def inspect
%(#<Herb::Location #{tree_inspect}>)
%(#<Herb::Location (location: #{tree_inspect})>)
end
end
end
16 changes: 14 additions & 2 deletions lib/herb/token.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@

module Herb
class Token
include Colors

attr_reader :value #: String
attr_reader :range #: Range
attr_reader :location #: Location
Expand Down Expand Up @@ -33,7 +35,7 @@ def to_json(state = nil)

#: () -> String
def tree_inspect
%("#{value.force_encoding("utf-8")}" #{location.tree_inspect})
"#{green("\"#{value.force_encoding("utf-8")}\"")} #{dimmed("(location: #{location.tree_inspect})")}"
end

#: () -> String
Expand All @@ -45,9 +47,19 @@ def value_inspect
end
end

#: () -> String
def colorize_range
white("[") + cyan(range.from.to_s) + white(", ") + cyan(range.to.to_s) + white("]")
end

#: (Position) -> String
def colorize_position(position)
white("(") + cyan(position.line.to_s) + white(":") + cyan(position.column.to_s) + white(")")
end

#: () -> String
def inspect
%(#<Herb::Token type="#{type}" value=#{value_inspect} range=#{range.tree_inspect} start=#{location.start.tree_inspect} end=#{location.end.tree_inspect}>)
"#{white("#<")}#{bold(yellow("Herb::Token"))} #{white("type=")}#{bright_magenta("\"#{type}\"")} #{white("value=")}#{green(value_inspect)} #{white("range=")}#{colorize_range} #{white("start=")}#{colorize_position(location.start)} #{white("end=")}#{colorize_position(location.end)}#{white(">")}"
end
end
end
Loading
Loading