From 8812caa00f29f041a7bc129227340726cca6a3e4 Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 16:32:27 +0900 Subject: [PATCH 1/9] Update gem revisions in rbs_collection.lock.yaml --- rbs_collection.lock.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rbs_collection.lock.yaml b/rbs_collection.lock.yaml index 8310e487..15d8d2ac 100644 --- a/rbs_collection.lock.yaml +++ b/rbs_collection.lock.yaml @@ -6,7 +6,7 @@ gems: source: type: git name: ruby/gem_rbs_collection - revision: ccbd2bbc6be5c195df1d90aa68d64916a9e7d0ab + revision: 7651e7b92c15bd5b4bc11fd3dd455be0ea571fd0 remote: https://github.com/ruby/gem_rbs_collection.git repo_dir: gems - name: erb @@ -26,7 +26,7 @@ gems: source: type: git name: ruby/gem_rbs_collection - revision: ccbd2bbc6be5c195df1d90aa68d64916a9e7d0ab + revision: 7651e7b92c15bd5b4bc11fd3dd455be0ea571fd0 remote: https://github.com/ruby/gem_rbs_collection.git repo_dir: gems - name: stackprof @@ -34,7 +34,7 @@ gems: source: type: git name: ruby/gem_rbs_collection - revision: ccbd2bbc6be5c195df1d90aa68d64916a9e7d0ab + revision: 7651e7b92c15bd5b4bc11fd3dd455be0ea571fd0 remote: https://github.com/ruby/gem_rbs_collection.git repo_dir: gems - name: strscan From ab46d8d6b42e0cb9719829397a8aa0b6797e6230 Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 16:36:02 +0900 Subject: [PATCH 2/9] Use rbs-inline style for Lrama::Lexer::GrammarFile --- lib/lrama/lexer/grammar_file.rb | 9 ++++++- sig/generated/lrama/lexer/grammar_file.rbs | 28 ++++++++++++++++++++++ sig/lrama/lexer/grammar_file.rbs | 17 ------------- 3 files changed, 36 insertions(+), 18 deletions(-) create mode 100644 sig/generated/lrama/lexer/grammar_file.rbs delete mode 100644 sig/lrama/lexer/grammar_file.rbs diff --git a/lib/lrama/lexer/grammar_file.rb b/lib/lrama/lexer/grammar_file.rb index 45c31229..37e82ff1 100644 --- a/lib/lrama/lexer/grammar_file.rb +++ b/lib/lrama/lexer/grammar_file.rb @@ -1,30 +1,37 @@ +# rbs_inline: enabled # frozen_string_literal: true module Lrama class Lexer class GrammarFile class Text < String + # @rbs () -> String def inspect length <= 50 ? super : "#{self[0..47]}...".inspect end end - attr_reader :path, :text + attr_reader :path #: String + attr_reader :text #: String + # @rbs (String path, String text) -> void def initialize(path, text) @path = path @text = Text.new(text).freeze end + # @rbs () -> String def inspect "<#{self.class}: @path=#{path}, @text=#{text.inspect}>" end + # @rbs (GrammarFile other) -> bool def ==(other) self.class == other.class && self.path == other.path end + # @rbs () -> Array[String] def lines @lines ||= text.split("\n") end diff --git a/sig/generated/lrama/lexer/grammar_file.rbs b/sig/generated/lrama/lexer/grammar_file.rbs new file mode 100644 index 00000000..006094ef --- /dev/null +++ b/sig/generated/lrama/lexer/grammar_file.rbs @@ -0,0 +1,28 @@ +# Generated from lib/lrama/lexer/grammar_file.rb with RBS::Inline + +module Lrama + class Lexer + class GrammarFile + class Text < String + # @rbs () -> String + def inspect: () -> String + end + + attr_reader path: String + + attr_reader text: String + + # @rbs (String path, String text) -> void + def initialize: (String path, String text) -> void + + # @rbs () -> String + def inspect: () -> String + + # @rbs (GrammarFile other) -> bool + def ==: (GrammarFile other) -> bool + + # @rbs () -> Array[String] + def lines: () -> Array[String] + end + end +end diff --git a/sig/lrama/lexer/grammar_file.rbs b/sig/lrama/lexer/grammar_file.rbs deleted file mode 100644 index 3a5418d2..00000000 --- a/sig/lrama/lexer/grammar_file.rbs +++ /dev/null @@ -1,17 +0,0 @@ -module Lrama - class Lexer - class GrammarFile - class Text < String - end - attr_reader path: String - attr_reader text: String - - @lines: Array[String] - - def initialize: (String path, String text) -> void - - def ==: (GrammarFile other) -> bool - def lines: () -> Array[String] - end - end -end From c4153d848d0de222fa6f840b07133e515ea16334 Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 16:45:59 +0900 Subject: [PATCH 3/9] Use rbs-inline style for Lrama::Lexer::Location --- lib/lrama/lexer/location.rb | 18 ++++++++- sig/generated/lrama/lexer/location.rbs | 52 ++++++++++++++++++++++++++ sig/lrama/lexer/location.rbs | 26 ------------- 3 files changed, 69 insertions(+), 27 deletions(-) create mode 100644 sig/generated/lrama/lexer/location.rbs delete mode 100644 sig/lrama/lexer/location.rbs diff --git a/lib/lrama/lexer/location.rb b/lib/lrama/lexer/location.rb index bf8f4f7e..defdbf8a 100644 --- a/lib/lrama/lexer/location.rb +++ b/lib/lrama/lexer/location.rb @@ -1,10 +1,16 @@ +# rbs_inline: enabled # frozen_string_literal: true module Lrama class Lexer class Location - attr_reader :grammar_file, :first_line, :first_column, :last_line, :last_column + attr_reader :grammar_file #: GrammarFile + attr_reader :first_line #: Integer + attr_reader :first_column #: Integer + attr_reader :last_line #: Integer + attr_reader :last_column #: Integer + # @rbs (grammar_file: GrammarFile, first_line: Integer, first_column: Integer, last_line: Integer, last_column: Integer) -> void def initialize(grammar_file:, first_line:, first_column:, last_line:, last_column:) @grammar_file = grammar_file @first_line = first_line @@ -13,6 +19,7 @@ def initialize(grammar_file:, first_line:, first_column:, last_line:, last_colum @last_column = last_column end + # @rbs (Location other) -> bool def ==(other) self.class == other.class && self.grammar_file == other.grammar_file && @@ -22,6 +29,7 @@ def ==(other) self.last_column == other.last_column end + # @rbs (Integer left, Integer right) -> Location def partial_location(left, right) offset = -first_column new_first_line = -1 @@ -52,10 +60,12 @@ def partial_location(left, right) ) end + # @rbs () -> String def to_s "#{path} (#{first_line},#{first_column})-(#{last_line},#{last_column})" end + # @rbs (String error_message) -> String def generate_error_message(error_message) <<~ERROR.chomp #{path}:#{first_line}:#{first_column}: #{error_message} @@ -63,6 +73,7 @@ def generate_error_message(error_message) ERROR end + # @rbs () -> String def line_with_carets <<~TEXT #{text} @@ -72,22 +83,27 @@ def line_with_carets private + # @rbs () -> String def path grammar_file.path end + # @rbs () -> String def blanks (text[0...first_column] or raise "#{first_column} is invalid").gsub(/[^\t]/, ' ') end + # @rbs () -> String def carets blanks + '^' * (last_column - first_column) end + # @rbs () -> String def text @text ||= _text.join("\n") end + # @rbs () -> Array[String] def _text @_text ||=begin range = (first_line - 1)...last_line diff --git a/sig/generated/lrama/lexer/location.rbs b/sig/generated/lrama/lexer/location.rbs new file mode 100644 index 00000000..1e0790f3 --- /dev/null +++ b/sig/generated/lrama/lexer/location.rbs @@ -0,0 +1,52 @@ +# Generated from lib/lrama/lexer/location.rb with RBS::Inline + +module Lrama + class Lexer + class Location + attr_reader grammar_file: GrammarFile + + attr_reader first_line: Integer + + attr_reader first_column: Integer + + attr_reader last_line: Integer + + attr_reader last_column: Integer + + # @rbs (grammar_file: GrammarFile, first_line: Integer, first_column: Integer, last_line: Integer, last_column: Integer) -> void + def initialize: (grammar_file: GrammarFile, first_line: Integer, first_column: Integer, last_line: Integer, last_column: Integer) -> void + + # @rbs (Location other) -> bool + def ==: (Location other) -> bool + + # @rbs (Integer left, Integer right) -> Location + def partial_location: (Integer left, Integer right) -> Location + + # @rbs () -> String + def to_s: () -> String + + # @rbs (String error_message) -> String + def generate_error_message: (String error_message) -> String + + # @rbs () -> String + def line_with_carets: () -> String + + private + + # @rbs () -> String + def path: () -> String + + # @rbs () -> String + def blanks: () -> String + + # @rbs () -> String + def carets: () -> String + + # @rbs () -> String + def text: () -> String + + # @rbs () -> Array[String] + def _text: () -> Array[String] + end + end +end diff --git a/sig/lrama/lexer/location.rbs b/sig/lrama/lexer/location.rbs deleted file mode 100644 index cb5dfcfd..00000000 --- a/sig/lrama/lexer/location.rbs +++ /dev/null @@ -1,26 +0,0 @@ -module Lrama - class Lexer - class Location - attr_reader grammar_file: GrammarFile - attr_reader first_line: Integer - attr_reader first_column: Integer - attr_reader last_line: Integer - attr_reader last_column: Integer - - def initialize: (grammar_file: GrammarFile, first_line: Integer, first_column: Integer, last_line: Integer, last_column: Integer) -> void - - def ==: (Location other) -> bool - def partial_location: (Integer, Integer) -> Location - def generate_error_message: (String) -> String - def line_with_carets: () -> String - - private - - def path: () -> String - def blanks: () -> String - def carets: () -> String - def text: () -> String - def _text: () -> Array[String] - end - end -end From 01703320064a774dec023a93de5c3868d98b99ed Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 16:52:56 +0900 Subject: [PATCH 4/9] Use rbs-inline style for Lrama::Lexer::Token::Char --- lib/lrama/lexer/token/char.rb | 1 + sig/{ => generated}/lrama/lexer/token/char.rbs | 2 ++ 2 files changed, 3 insertions(+) rename sig/{ => generated}/lrama/lexer/token/char.rbs (59%) diff --git a/lib/lrama/lexer/token/char.rb b/lib/lrama/lexer/token/char.rb index 9e21952c..fcab7a58 100644 --- a/lib/lrama/lexer/token/char.rb +++ b/lib/lrama/lexer/token/char.rb @@ -1,3 +1,4 @@ +# rbs_inline: enabled # frozen_string_literal: true module Lrama diff --git a/sig/lrama/lexer/token/char.rbs b/sig/generated/lrama/lexer/token/char.rbs similarity index 59% rename from sig/lrama/lexer/token/char.rbs rename to sig/generated/lrama/lexer/token/char.rbs index ec3560ca..9953091a 100644 --- a/sig/lrama/lexer/token/char.rbs +++ b/sig/generated/lrama/lexer/token/char.rbs @@ -1,3 +1,5 @@ +# Generated from lib/lrama/lexer/token/char.rb with RBS::Inline + module Lrama class Lexer class Token From 0cdeedd93e73bf8690508391d5b6b32a689923a6 Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 16:53:17 +0900 Subject: [PATCH 5/9] Use rbs-inline style for Lrama::Lexer::Token::Ident --- lib/lrama/lexer/token/ident.rb | 1 + sig/{ => generated}/lrama/lexer/token/ident.rbs | 2 ++ 2 files changed, 3 insertions(+) rename sig/{ => generated}/lrama/lexer/token/ident.rbs (59%) diff --git a/lib/lrama/lexer/token/ident.rb b/lib/lrama/lexer/token/ident.rb index 84835c00..8b1328a0 100644 --- a/lib/lrama/lexer/token/ident.rb +++ b/lib/lrama/lexer/token/ident.rb @@ -1,3 +1,4 @@ +# rbs_inline: enabled # frozen_string_literal: true module Lrama diff --git a/sig/lrama/lexer/token/ident.rbs b/sig/generated/lrama/lexer/token/ident.rbs similarity index 59% rename from sig/lrama/lexer/token/ident.rbs rename to sig/generated/lrama/lexer/token/ident.rbs index e576eaec..5f59f99e 100644 --- a/sig/lrama/lexer/token/ident.rbs +++ b/sig/generated/lrama/lexer/token/ident.rbs @@ -1,3 +1,5 @@ +# Generated from lib/lrama/lexer/token/ident.rb with RBS::Inline + module Lrama class Lexer class Token From f958f30f9e257337ac9ad3149c6f987805353508 Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 16:53:28 +0900 Subject: [PATCH 6/9] Use rbs-inline style for Lrama::Lexer::Token::InstantiateRule --- lib/lrama/lexer/token/instantiate_rule.rb | 7 ++++++- .../lrama/lexer/token/instantiate_rule.rbs | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) rename sig/{ => generated}/lrama/lexer/token/instantiate_rule.rbs (60%) diff --git a/lib/lrama/lexer/token/instantiate_rule.rb b/lib/lrama/lexer/token/instantiate_rule.rb index db7e611c..37d412aa 100644 --- a/lib/lrama/lexer/token/instantiate_rule.rb +++ b/lib/lrama/lexer/token/instantiate_rule.rb @@ -1,21 +1,26 @@ +# rbs_inline: enabled # frozen_string_literal: true module Lrama class Lexer class Token class InstantiateRule < Token - attr_reader :args, :lhs_tag + attr_reader :args #: Array[Lexer::Token] + attr_reader :lhs_tag #: Lexer::Token::Tag? + # @rbs (s_value: String, ?alias_name: String, ?location: Location, ?args: Array[Lexer::Token], ?lhs_tag: Lexer::Token::Tag?) -> void def initialize(s_value:, alias_name: nil, location: nil, args: [], lhs_tag: nil) super s_value: s_value, alias_name: alias_name, location: location @args = args @lhs_tag = lhs_tag end + # @rbs () -> String def rule_name s_value end + # @rbs () -> Integer def args_count args.count end diff --git a/sig/lrama/lexer/token/instantiate_rule.rbs b/sig/generated/lrama/lexer/token/instantiate_rule.rbs similarity index 60% rename from sig/lrama/lexer/token/instantiate_rule.rbs rename to sig/generated/lrama/lexer/token/instantiate_rule.rbs index 3a8296ef..78581468 100644 --- a/sig/lrama/lexer/token/instantiate_rule.rbs +++ b/sig/generated/lrama/lexer/token/instantiate_rule.rbs @@ -1,12 +1,20 @@ +# Generated from lib/lrama/lexer/token/instantiate_rule.rb with RBS::Inline + module Lrama class Lexer class Token class InstantiateRule < Token attr_reader args: Array[Lexer::Token] + attr_reader lhs_tag: Lexer::Token::Tag? + # @rbs (s_value: String, ?alias_name: String, ?location: Location, ?args: Array[Lexer::Token], ?lhs_tag: Lexer::Token::Tag?) -> void def initialize: (s_value: String, ?alias_name: String, ?location: Location, ?args: Array[Lexer::Token], ?lhs_tag: Lexer::Token::Tag?) -> void + + # @rbs () -> String def rule_name: () -> String + + # @rbs () -> Integer def args_count: () -> Integer end end From 6e90e96b5f307cd82a5e610b85a8d046b611f8ea Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 16:55:24 +0900 Subject: [PATCH 7/9] Use rbs-inline style for Lrama::Lexer::Token::Tag --- lib/lrama/lexer/token/tag.rb | 4 +++- sig/{ => generated}/lrama/lexer/token/tag.rbs | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) rename sig/{ => generated}/lrama/lexer/token/tag.rbs (58%) diff --git a/lib/lrama/lexer/token/tag.rb b/lib/lrama/lexer/token/tag.rb index 52dcb50c..b346ef7c 100644 --- a/lib/lrama/lexer/token/tag.rb +++ b/lib/lrama/lexer/token/tag.rb @@ -1,11 +1,13 @@ +# rbs_inline: enabled # frozen_string_literal: true module Lrama class Lexer class Token class Tag < Token - # Omit "<>" + # @rbs () -> String def member + # Omit "<>" s_value[1..-2] or raise "Unexpected Tag format (#{s_value})" end end diff --git a/sig/lrama/lexer/token/tag.rbs b/sig/generated/lrama/lexer/token/tag.rbs similarity index 58% rename from sig/lrama/lexer/token/tag.rbs rename to sig/generated/lrama/lexer/token/tag.rbs index 8076decb..20dcf321 100644 --- a/sig/lrama/lexer/token/tag.rbs +++ b/sig/generated/lrama/lexer/token/tag.rbs @@ -1,7 +1,10 @@ +# Generated from lib/lrama/lexer/token/tag.rb with RBS::Inline + module Lrama class Lexer class Token class Tag < Token + # @rbs () -> String def member: () -> String end end From cb384ddfaf3dee4835da7f4c74f96b019aadce73 Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 16:58:48 +0900 Subject: [PATCH 8/9] Use rbs-inline style for Lrama::Lexer::Token::UserCode --- lib/lrama/lexer/token/user_code.rb | 6 +++++- sig/{ => generated}/lrama/lexer/token/user_code.rbs | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) rename sig/{ => generated}/lrama/lexer/token/user_code.rbs (60%) diff --git a/lib/lrama/lexer/token/user_code.rb b/lib/lrama/lexer/token/user_code.rb index c606200d..4ef40e6d 100644 --- a/lib/lrama/lexer/token/user_code.rb +++ b/lib/lrama/lexer/token/user_code.rb @@ -1,3 +1,4 @@ +# rbs_inline: enabled # frozen_string_literal: true require "strscan" @@ -6,14 +7,16 @@ module Lrama class Lexer class Token class UserCode < Token - attr_accessor :tag + attr_accessor :tag #: Lexer::Token::Tag + # @rbs () -> Array[Lrama::Grammar::Reference] def references @references ||= _references end private + # @rbs () -> Array[Lrama::Grammar::Reference] def _references scanner = StringScanner.new(s_value) references = [] #: Array[Grammar::Reference] @@ -32,6 +35,7 @@ def _references references end + # @rbs (StringScanner scanner) -> Lrama::Grammar::Reference? def scan_reference(scanner) start = scanner.pos case diff --git a/sig/lrama/lexer/token/user_code.rbs b/sig/generated/lrama/lexer/token/user_code.rbs similarity index 60% rename from sig/lrama/lexer/token/user_code.rbs rename to sig/generated/lrama/lexer/token/user_code.rbs index 564b63b3..db72f6d1 100644 --- a/sig/lrama/lexer/token/user_code.rbs +++ b/sig/generated/lrama/lexer/token/user_code.rbs @@ -1,15 +1,20 @@ +# Generated from lib/lrama/lexer/token/user_code.rb with RBS::Inline + module Lrama class Lexer class Token class UserCode < Token attr_accessor tag: Lexer::Token::Tag - @references: Array[Lrama::Grammar::Reference] + # @rbs () -> Array[Lrama::Grammar::Reference] def references: () -> Array[Lrama::Grammar::Reference] private + # @rbs () -> Array[Lrama::Grammar::Reference] def _references: () -> Array[Lrama::Grammar::Reference] + + # @rbs (StringScanner scanner) -> Lrama::Grammar::Reference? def scan_reference: (StringScanner scanner) -> Lrama::Grammar::Reference? end end From a6c21d7538800f756ddb45b5cbb4c4b900b6fcbb Mon Sep 17 00:00:00 2001 From: ydah Date: Mon, 13 Jan 2025 17:02:32 +0900 Subject: [PATCH 9/9] Use rbs-inline style for Lrama::Lexer::Token --- lib/lrama/lexer/token.rb | 16 +++++++++++-- sig/{ => generated}/lrama/lexer/token.rbs | 29 ++++++++++++++++++++--- 2 files changed, 40 insertions(+), 5 deletions(-) rename sig/{ => generated}/lrama/lexer/token.rbs (61%) diff --git a/lib/lrama/lexer/token.rb b/lib/lrama/lexer/token.rb index 45a097f6..63da8be4 100644 --- a/lib/lrama/lexer/token.rb +++ b/lib/lrama/lexer/token.rb @@ -1,3 +1,4 @@ +# rbs_inline: enabled # frozen_string_literal: true require_relative 'token/char' @@ -9,9 +10,12 @@ module Lrama class Lexer class Token - attr_reader :s_value, :location - attr_accessor :alias_name, :referred + attr_reader :s_value #: String + attr_reader :location #: Location + attr_accessor :alias_name #: String + attr_accessor :referred #: bool + # @rbs (s_value: String, ?alias_name: String, ?location: Location) -> void def initialize(s_value:, alias_name: nil, location: nil) s_value.freeze @s_value = s_value @@ -19,36 +23,44 @@ def initialize(s_value:, alias_name: nil, location: nil) @location = location end + # @rbs () -> String def to_s "value: `#{s_value}`, location: #{location}" end + # @rbs (String string) -> bool def referred_by?(string) [self.s_value, self.alias_name].compact.include?(string) end + # @rbs (Token other) -> bool def ==(other) self.class == other.class && self.s_value == other.s_value end + # @rbs () -> Integer def first_line location.first_line end alias :line :first_line + # @rbs () -> Integer def first_column location.first_column end alias :column :first_column + # @rbs () -> Integer def last_line location.last_line end + # @rbs () -> Integer def last_column location.last_column end + # @rbs (Lrama::Grammar::Reference ref, String message) -> bot def invalid_ref(ref, message) location = self.location.partial_location(ref.first_column, ref.last_column) raise location.generate_error_message(message) diff --git a/sig/lrama/lexer/token.rbs b/sig/generated/lrama/lexer/token.rbs similarity index 61% rename from sig/lrama/lexer/token.rbs rename to sig/generated/lrama/lexer/token.rbs index 1ee0b273..cddea7c5 100644 --- a/sig/lrama/lexer/token.rbs +++ b/sig/generated/lrama/lexer/token.rbs @@ -1,22 +1,45 @@ +# Generated from lib/lrama/lexer/token.rb with RBS::Inline + module Lrama class Lexer class Token attr_reader s_value: String - attr_accessor alias_name: String + attr_reader location: Location + + attr_accessor alias_name: String + attr_accessor referred: bool + # @rbs (s_value: String, ?alias_name: String, ?location: Location) -> void def initialize: (s_value: String, ?alias_name: String, ?location: Location) -> void + # @rbs () -> String def to_s: () -> String + + # @rbs (String string) -> bool def referred_by?: (String string) -> bool + + # @rbs (Token other) -> bool def ==: (Token other) -> bool + + # @rbs () -> Integer def first_line: () -> Integer + + alias line first_line + + # @rbs () -> Integer def first_column: () -> Integer + + alias column first_column + + # @rbs () -> Integer def last_line: () -> Integer + + # @rbs () -> Integer def last_column: () -> Integer - alias line first_line - alias column first_column + + # @rbs (Lrama::Grammar::Reference ref, String message) -> bot def invalid_ref: (Lrama::Grammar::Reference ref, String message) -> bot end end