From 1b3d701277acb17e72c0efd1207ae1dd856eab8b Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Tue, 13 Jun 2023 19:36:16 -0400 Subject: [PATCH 01/18] Add rbs gem --- Gemfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Gemfile b/Gemfile index d0a2acf..66aaebf 100644 --- a/Gemfile +++ b/Gemfile @@ -4,6 +4,7 @@ source 'https://rubygems.org' gemspec +gem 'rbs' gem 'rubyzip' group :development do From 63545701fa4c47d9c1a0bc65e7ddd7c1fc19e2a5 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Tue, 13 Jun 2023 22:40:53 -0400 Subject: [PATCH 02/18] Add all rbs types in sig/ --- sig/lib/rambling/trie.rbs | 27 ++++++++ sig/lib/rambling/trie/comparable.rbs | 7 +++ sig/lib/rambling/trie/compressible.rbs | 7 +++ sig/lib/rambling/trie/compressor.rbs | 19 ++++++ .../trie/configuration/properties.rbs | 24 +++++++ .../configuration/provider_collection.rbs | 41 ++++++++++++ sig/lib/rambling/trie/container.rbs | 63 +++++++++++++++++++ sig/lib/rambling/trie/enumerable.rbs | 11 ++++ sig/lib/rambling/trie/inspectable.rbs | 19 ++++++ sig/lib/rambling/trie/invalid_operation.rbs | 7 +++ sig/lib/rambling/trie/nodes/compressed.rbs | 21 +++++++ sig/lib/rambling/trie/nodes/node.rbs | 47 ++++++++++++++ sig/lib/rambling/trie/nodes/raw.rbs | 25 ++++++++ sig/lib/rambling/trie/readers/reader.rbs | 9 +++ sig/lib/rambling/trie/serializers/file.rbs | 8 +++ sig/lib/rambling/trie/serializers/marshal.rbs | 13 ++++ .../rambling/trie/serializers/serializer.rbs | 10 +++ sig/lib/rambling/trie/serializers/yaml.rbs | 13 ++++ sig/lib/rambling/trie/serializers/zip.rbs | 19 ++++++ sig/lib/rambling/trie/stringifyable.rbs | 9 +++ 20 files changed, 399 insertions(+) create mode 100644 sig/lib/rambling/trie.rbs create mode 100644 sig/lib/rambling/trie/comparable.rbs create mode 100644 sig/lib/rambling/trie/compressible.rbs create mode 100644 sig/lib/rambling/trie/compressor.rbs create mode 100644 sig/lib/rambling/trie/configuration/properties.rbs create mode 100644 sig/lib/rambling/trie/configuration/provider_collection.rbs create mode 100644 sig/lib/rambling/trie/container.rbs create mode 100644 sig/lib/rambling/trie/enumerable.rbs create mode 100644 sig/lib/rambling/trie/inspectable.rbs create mode 100644 sig/lib/rambling/trie/invalid_operation.rbs create mode 100644 sig/lib/rambling/trie/nodes/compressed.rbs create mode 100644 sig/lib/rambling/trie/nodes/node.rbs create mode 100644 sig/lib/rambling/trie/nodes/raw.rbs create mode 100644 sig/lib/rambling/trie/readers/reader.rbs create mode 100644 sig/lib/rambling/trie/serializers/file.rbs create mode 100644 sig/lib/rambling/trie/serializers/marshal.rbs create mode 100644 sig/lib/rambling/trie/serializers/serializer.rbs create mode 100644 sig/lib/rambling/trie/serializers/yaml.rbs create mode 100644 sig/lib/rambling/trie/serializers/zip.rbs create mode 100644 sig/lib/rambling/trie/stringifyable.rbs diff --git a/sig/lib/rambling/trie.rbs b/sig/lib/rambling/trie.rbs new file mode 100644 index 0000000..1141c7e --- /dev/null +++ b/sig/lib/rambling/trie.rbs @@ -0,0 +1,27 @@ +module Rambling + module Trie + VERSION: String + + @properties: Configuration::Properties + + def create: (String?, Readers::Reader?) { (Container) -> void } -> Container + + def load: (String, Serializers::Serializer[untyped]?) -> Container + + def dump: (Container, String, Serializers::Serializer[untyped]?) -> void + + def config: { (Configuration::Properties) -> void } -> Configuration::Properties + + private + + def properties: -> untyped + + def readers: -> untyped + + def serializers: -> untyped + + def compressor: -> untyped + + def root_builder: -> ^() -> Nodes::Node + end +end diff --git a/sig/lib/rambling/trie/comparable.rbs b/sig/lib/rambling/trie/comparable.rbs new file mode 100644 index 0000000..0caa833 --- /dev/null +++ b/sig/lib/rambling/trie/comparable.rbs @@ -0,0 +1,7 @@ +module Rambling + module Trie + module Comparable + def ==: (Nodes::Node) -> bool + end + end +end diff --git a/sig/lib/rambling/trie/compressible.rbs b/sig/lib/rambling/trie/compressible.rbs new file mode 100644 index 0000000..aba910e --- /dev/null +++ b/sig/lib/rambling/trie/compressible.rbs @@ -0,0 +1,7 @@ +module Rambling + module Trie + module Compressible + def compressible?: -> bool + end + end +end diff --git a/sig/lib/rambling/trie/compressor.rbs b/sig/lib/rambling/trie/compressor.rbs new file mode 100644 index 0000000..963fdd5 --- /dev/null +++ b/sig/lib/rambling/trie/compressor.rbs @@ -0,0 +1,19 @@ +module Rambling + module Trie + class Compressor + def compress: (Nodes::Node) -> Nodes::Compressed + + private + + def compress_child_and_merge: (Nodes::Node) -> Nodes::Compressed + + def merge: (Nodes::Node, Nodes::Node) -> Nodes::Compressed + + def compress_children_and_copy: (Nodes::Node) -> Nodes::Compressed + + def compress_children: (Hash[Symbol, Nodes::Node]) -> Hash[Symbol, Nodes::Node] + + def new_compressed_node: (Symbol?, Nodes::Node?, Hash[Symbol, Nodes::Node], bool?) -> untyped + end + end +end diff --git a/sig/lib/rambling/trie/configuration/properties.rbs b/sig/lib/rambling/trie/configuration/properties.rbs new file mode 100644 index 0000000..75d04ec --- /dev/null +++ b/sig/lib/rambling/trie/configuration/properties.rbs @@ -0,0 +1,24 @@ +module Rambling + module Trie + module Configuration + class Properties + attr_reader readers: ProviderCollection[Readers::Reader] + attr_reader serializers: ProviderCollection[Serializers::Serializer[untyped]] + attr_accessor compressor: Compressor + attr_accessor root_builder: ^() -> Nodes::Node + attr_accessor tmp_path: String + + def reset: -> void + + private + + attr_writer readers: ProviderCollection[Readers::Reader] + attr_writer serializers: ProviderCollection[Serializers::Serializer[untyped]] + + def reset_readers: -> void + + def reset_serializers: -> void + end + end + end +end diff --git a/sig/lib/rambling/trie/configuration/provider_collection.rbs b/sig/lib/rambling/trie/configuration/provider_collection.rbs new file mode 100644 index 0000000..a8255ee --- /dev/null +++ b/sig/lib/rambling/trie/configuration/provider_collection.rbs @@ -0,0 +1,41 @@ +module Rambling + module Trie + module Configuration + class ProviderCollection[TProvider] + @providers: Hash[Symbol, TProvider] + + attr_reader name: Symbol + attr_reader default: TProvider? + + def []: (Symbol) -> TProvider + + def add: (Symbol, TProvider) -> TProvider + + def default=: (TProvider) -> TProvider + + def formats: -> Array[Symbol] + + def providers: -> Hash[Symbol, TProvider] + + def reset: -> void + + def resolve: (String) -> TProvider? + + private + + attr_reader configured_default: TProvider? + attr_reader configured_providers: Hash[Symbol, TProvider] + + def []=: (Symbol, TProvider) -> TProvider + + def values: -> Array[TProvider] + + def file_format: (String) -> Symbol + + def contains?: (TProvider) -> bool + + alias provider_instances values + end + end + end +end diff --git a/sig/lib/rambling/trie/container.rbs b/sig/lib/rambling/trie/container.rbs new file mode 100644 index 0000000..25284a0 --- /dev/null +++ b/sig/lib/rambling/trie/container.rbs @@ -0,0 +1,63 @@ +module Rambling + module Trie + class Container + @compressor: Compressor + + attr_reader root: Nodes::Node + + def add: (String) -> Nodes::Node + + def concat: (Array[String]) -> Array[Nodes::Node] + + def compress!: -> Container + + def compress: -> Container + + def each: -> (Enumerator[String, void] | Nodes::Node) + + def partial_word?: (String) -> bool + + def word?: (String) -> bool + + def scan: (String) -> Array[String] + + def words_within: (String) -> Array[String] + + def words_within?: (String) -> bool + + def ==: (Container) -> bool + + def []: (Symbol) -> Nodes::Node + + def children: -> Array[Nodes::Node] + + def children_tree: -> Hash[Symbol, Nodes::Node] + + def compressed?: -> bool + + def to_a: -> Array[String] + + def key?: (Symbol) -> bool + + def size: -> Numeric + + alias include? word? + alias match? partial_word? + alias words? scan + alias << add + alias has_key? key? + alias has_letter? key? + + private + + attr_reader compressor: Compressor + attr_writer root: Nodes::Node + + def words_within_root: (String) -> (Enumerator[String, void] | Numeric) + + def compress_root: -> Nodes::Compressed + + def char_symbols: (String) -> Array[Symbol] + end + end +end diff --git a/sig/lib/rambling/trie/enumerable.rbs b/sig/lib/rambling/trie/enumerable.rbs new file mode 100644 index 0000000..31938ca --- /dev/null +++ b/sig/lib/rambling/trie/enumerable.rbs @@ -0,0 +1,11 @@ +module Rambling + module Trie + module Enumerable + include ::Enumerable[Nodes::Node] + + alias size count + + def each: { (String) -> void } -> (Enumerator[String, void] | Enumerable) + end + end +end diff --git a/sig/lib/rambling/trie/inspectable.rbs b/sig/lib/rambling/trie/inspectable.rbs new file mode 100644 index 0000000..a4ceb09 --- /dev/null +++ b/sig/lib/rambling/trie/inspectable.rbs @@ -0,0 +1,19 @@ +module Rambling + module Trie + module Inspectable + def inspect: -> String + + private + + def class_name: -> String? + + def attributes: -> String + + def letter_inspect: -> String + + def terminal_inspect: -> String + + def children_inspect: -> String + end + end +end diff --git a/sig/lib/rambling/trie/invalid_operation.rbs b/sig/lib/rambling/trie/invalid_operation.rbs new file mode 100644 index 0000000..f35485b --- /dev/null +++ b/sig/lib/rambling/trie/invalid_operation.rbs @@ -0,0 +1,7 @@ +module Rambling + module Trie + class InvalidOperation < RuntimeError + def initialize: (String? message) -> void + end + end +end diff --git a/sig/lib/rambling/trie/nodes/compressed.rbs b/sig/lib/rambling/trie/nodes/compressed.rbs new file mode 100644 index 0000000..2452374 --- /dev/null +++ b/sig/lib/rambling/trie/nodes/compressed.rbs @@ -0,0 +1,21 @@ +module Rambling + module Trie + module Nodes + class Compressed < Node + def add: (Array[Symbol]) -> Node + + def compressed?: -> bool + + private + + def partial_word_chars?: (Array[String | Symbol]) -> bool + + def word_chars?: (Array[String | Symbol]) -> bool + + def closest_node: (Array[String | Symbol]) -> Node + + def children_match_prefix: (Array[String | Symbol]) -> Enumerator[String, void] + end + end + end +end diff --git a/sig/lib/rambling/trie/nodes/node.rbs b/sig/lib/rambling/trie/nodes/node.rbs new file mode 100644 index 0000000..add5a65 --- /dev/null +++ b/sig/lib/rambling/trie/nodes/node.rbs @@ -0,0 +1,47 @@ +module Rambling + module Trie + module Nodes + class Node + attr_reader letter: Symbol? + attr_accessor children_tree: Hash[Symbol, Node] + attr_accessor parent: Node? + + def children: -> Array[Node] + + def first_child: -> Node? + + def match_prefix: (String) { (String) -> void } -> Enumerator[String, void] + + def root?: -> bool + + def scan: (Array[String]) -> Node + + def terminal?: -> bool + + def terminal!: -> Node + + def letter=: (String | Symbol?) -> Symbol? + + def partial_word?: (Array[String]) -> bool + + def word?: (Array[String]) -> bool + + def []: (Symbol) -> Node + + def []=: (Symbol, Node) -> Node + + def key?: (Symbol) -> bool + + def delete: (Symbol) -> Node? + + alias has_key? key? + + private + + def missing: -> Node + + attr_accessor terminal: bool? + end + end + end +end diff --git a/sig/lib/rambling/trie/nodes/raw.rbs b/sig/lib/rambling/trie/nodes/raw.rbs new file mode 100644 index 0000000..8ca1b78 --- /dev/null +++ b/sig/lib/rambling/trie/nodes/raw.rbs @@ -0,0 +1,25 @@ +module Rambling + module Trie + module Nodes + class Raw < Node + def add: (Array[Symbol]) -> Node + + def compressed?: -> bool + + private + + def add_to_children_tree: (Array[Symbol]) -> Node + + def new_node: (Symbol) -> Node + + def partial_word_chars?: (Array[String | Symbol]) -> bool + + def word_chars?: (Array[String | Symbol]) -> bool + + def closest_node: (Array[String | Symbol]) -> Node + + def children_match_prefix: (Array[String | Symbol]) -> Enumerator[String, void] + end + end + end +end diff --git a/sig/lib/rambling/trie/readers/reader.rbs b/sig/lib/rambling/trie/readers/reader.rbs new file mode 100644 index 0000000..6e0e791 --- /dev/null +++ b/sig/lib/rambling/trie/readers/reader.rbs @@ -0,0 +1,9 @@ +module Rambling + module Trie + module Readers + class Reader + def each_word: (String) { (String) -> void } -> (Enumerator[String, void] | Reader) + end + end + end +end diff --git a/sig/lib/rambling/trie/serializers/file.rbs b/sig/lib/rambling/trie/serializers/file.rbs new file mode 100644 index 0000000..04a2caf --- /dev/null +++ b/sig/lib/rambling/trie/serializers/file.rbs @@ -0,0 +1,8 @@ +module Rambling + module Trie + module Serializers + class File < Serializer[String] + end + end + end +end diff --git a/sig/lib/rambling/trie/serializers/marshal.rbs b/sig/lib/rambling/trie/serializers/marshal.rbs new file mode 100644 index 0000000..6f9e5b3 --- /dev/null +++ b/sig/lib/rambling/trie/serializers/marshal.rbs @@ -0,0 +1,13 @@ +module Rambling + module Trie + module Serializers + class Marshal < Serializer[Nodes::Node] + @serializer: Serializer[String] + + private + + attr_reader serializer: Serializer[String] + end + end + end +end diff --git a/sig/lib/rambling/trie/serializers/serializer.rbs b/sig/lib/rambling/trie/serializers/serializer.rbs new file mode 100644 index 0000000..f05100b --- /dev/null +++ b/sig/lib/rambling/trie/serializers/serializer.rbs @@ -0,0 +1,10 @@ +module Rambling + module Trie + module Serializers + class Serializer[TContents] + def load: (String) -> TContents + def dump: (TContents, String) -> Numeric + end + end + end +end diff --git a/sig/lib/rambling/trie/serializers/yaml.rbs b/sig/lib/rambling/trie/serializers/yaml.rbs new file mode 100644 index 0000000..a647977 --- /dev/null +++ b/sig/lib/rambling/trie/serializers/yaml.rbs @@ -0,0 +1,13 @@ +module Rambling + module Trie + module Serializers + class Yaml < Serializer[Nodes::Node] + @serializer: Serializer[String] + + private + + attr_reader serializer: Serializer[String] + end + end + end +end diff --git a/sig/lib/rambling/trie/serializers/zip.rbs b/sig/lib/rambling/trie/serializers/zip.rbs new file mode 100644 index 0000000..51b25f3 --- /dev/null +++ b/sig/lib/rambling/trie/serializers/zip.rbs @@ -0,0 +1,19 @@ +module Rambling + module Trie + module Serializers + class Zip < Serializer[Nodes::Node] + @properties: Configuration::Properties + + private + + attr_reader properties: Configuration::Properties + + def serializers: -> Configuration::ProviderCollection[Serializer[untyped]] + + def tmp_path: -> String + + def path: (String) -> String + end + end + end +end diff --git a/sig/lib/rambling/trie/stringifyable.rbs b/sig/lib/rambling/trie/stringifyable.rbs new file mode 100644 index 0000000..cc1dda9 --- /dev/null +++ b/sig/lib/rambling/trie/stringifyable.rbs @@ -0,0 +1,9 @@ +module Rambling + module Trie + module Stringifyable + def as_word: -> String + + def to_s: -> String + end + end +end From 2ce0df1b31b48fffe30b34ed1d1d2ada0fd11092 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Tue, 13 Jun 2023 22:42:39 -0400 Subject: [PATCH 03/18] Fix yardoc comments to match rbs types --- lib/rambling/trie/compressor.rb | 2 +- lib/rambling/trie/container.rb | 2 +- lib/rambling/trie/nodes/node.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/rambling/trie/compressor.rb b/lib/rambling/trie/compressor.rb index 9bced88..b729189 100644 --- a/lib/rambling/trie/compressor.rb +++ b/lib/rambling/trie/compressor.rb @@ -5,7 +5,7 @@ module Trie # Responsible for the compression process of a trie data structure. class Compressor # Compresses a {Nodes::Node Node} from a trie data structure. - # @param [Nodes::Raw] node the node to compress. + # @param [Nodes::Node] node the node to compress. # @return [Nodes::Compressed] node the compressed version of the node. def compress node if node.compressible? diff --git a/lib/rambling/trie/container.rb b/lib/rambling/trie/container.rb index 8570049..2932447 100644 --- a/lib/rambling/trie/container.rb +++ b/lib/rambling/trie/container.rb @@ -87,7 +87,7 @@ def scan word = '' # Returns all words within a string that match a word contained in the trie. # @param [String] phrase the string to look for matching words in. - # @return [Enumerator] all the words in the given string that match a word in the trie. + # @return [Array] all the words in the given string that match a word in the trie. # @yield [String] each word found in phrase. def words_within phrase words_within_root(phrase).to_a diff --git a/lib/rambling/trie/nodes/node.rb b/lib/rambling/trie/nodes/node.rb index 4163e9d..d9ddbb1 100644 --- a/lib/rambling/trie/nodes/node.rb +++ b/lib/rambling/trie/nodes/node.rb @@ -147,7 +147,7 @@ def key? letter # Delete a given letter and its corresponding {Node Node} from # this {Node Node}'s children tree. # @param [Symbol] letter the letter to delete from the node's children tree. - # @return [Node] the node corresponding to the deleted letter. + # @return [Node, nil] the node corresponding to the deleted letter. # @see https://ruby-doc.org/core-2.7.0/Hash.html#method-i-delete Hash#delete def delete letter children_tree.delete letter From 58778b76d8ff6be91cd1608daf7cb6a2c0bfbd5a Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Thu, 8 Feb 2024 13:24:51 -0500 Subject: [PATCH 04/18] Add rbs step to lint --- .github/workflows/ruby.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ruby.yml b/.github/workflows/ruby.yml index a7a3bc0..7f5dd8b 100644 --- a/.github/workflows/ruby.yml +++ b/.github/workflows/ruby.yml @@ -23,6 +23,8 @@ jobs: bundler-cache: true - name: Run rubocop run: bundle exec rubocop + - name: Run rbs + run: bundle exec rbs validate lib/**/*.rb spec: runs-on: ubuntu-latest strategy: From d9825e645ced7de0bf91b9e263c9afbd0ebf6afb Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Thu, 8 Feb 2024 14:33:54 -0500 Subject: [PATCH 05/18] Add steep gem and corresponding config --- Gemfile | 1 + Steepfile | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 Steepfile diff --git a/Gemfile b/Gemfile index 66aaebf..1ad6b3f 100644 --- a/Gemfile +++ b/Gemfile @@ -5,6 +5,7 @@ source 'https://rubygems.org' gemspec gem 'rbs' +gem 'steep' gem 'rubyzip' group :development do diff --git a/Steepfile b/Steepfile new file mode 100644 index 0000000..27e4f12 --- /dev/null +++ b/Steepfile @@ -0,0 +1,29 @@ +# D = Steep::Diagnostic +# +target :lib do + signature 'sig' + + check 'lib' # Directory name +# check 'Gemfile' # File name +# check 'app/models/**/*.rb' # Glob +# # ignore 'lib/templates/*.rb' +# +# # library 'pathname' # Standard libraries +# # library 'strong_json' # Gems +# +# # configure_code_diagnostics(D::Ruby.default) # `default` diagnostics setting (applies by default) +# # configure_code_diagnostics(D::Ruby.strict) # `strict` diagnostics setting +# # configure_code_diagnostics(D::Ruby.lenient) # `lenient` diagnostics setting +# # configure_code_diagnostics(D::Ruby.silent) # `silent` diagnostics setting +# # configure_code_diagnostics do |hash| # You can setup everything yourself +# # hash[D::Ruby::NoMethod] = :information +# # end +end + +# target :test do +# signature 'sig', 'sig-private' +# +# check 'test' +# +# # library 'pathname' # Standard libraries +# end From 186439d7abb3dcde4b3da1986674127d3e9dc8fa Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Thu, 8 Feb 2024 14:35:02 -0500 Subject: [PATCH 06/18] Add type defs for Nodes::Missing and Readers::PlainText --- sig/lib/rambling/trie/nodes/missing.rbs | 8 ++++++++ sig/lib/rambling/trie/readers/plain_text.rbs | 9 +++++++++ 2 files changed, 17 insertions(+) create mode 100644 sig/lib/rambling/trie/nodes/missing.rbs create mode 100644 sig/lib/rambling/trie/readers/plain_text.rbs diff --git a/sig/lib/rambling/trie/nodes/missing.rbs b/sig/lib/rambling/trie/nodes/missing.rbs new file mode 100644 index 0000000..15171cc --- /dev/null +++ b/sig/lib/rambling/trie/nodes/missing.rbs @@ -0,0 +1,8 @@ +module Rambling + module Trie + module Nodes + class Missing < Node + end + end + end +end \ No newline at end of file diff --git a/sig/lib/rambling/trie/readers/plain_text.rbs b/sig/lib/rambling/trie/readers/plain_text.rbs new file mode 100644 index 0000000..4653dcc --- /dev/null +++ b/sig/lib/rambling/trie/readers/plain_text.rbs @@ -0,0 +1,9 @@ +module Rambling + module Trie + module Readers + class PlainText < Reader + def each_word: (String) { (String?) -> void } -> (Enumerator[String?, void] | PlainText) + end + end + end +end \ No newline at end of file From 8c160cf5f240b152d965ada131a35b8a00e35e43 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Thu, 8 Feb 2024 14:35:34 -0500 Subject: [PATCH 07/18] Add all missing initialize methods to type sigs and remove all "untyped"s --- lib/rambling/trie/configuration/properties.rb | 7 +++++-- lib/rambling/trie/nodes/node.rb | 2 ++ sig/lib/rambling/trie.rbs | 18 +++++++++--------- sig/lib/rambling/trie/compressor.rbs | 2 +- .../rambling/trie/configuration/properties.rbs | 8 ++++++-- .../trie/configuration/provider_collection.rbs | 4 +++- sig/lib/rambling/trie/container.rbs | 6 ++++-- sig/lib/rambling/trie/enumerable.rbs | 2 +- sig/lib/rambling/trie/nodes/compressed.rbs | 2 +- sig/lib/rambling/trie/nodes/node.rbs | 8 ++++++++ sig/lib/rambling/trie/nodes/raw.rbs | 2 +- sig/lib/rambling/trie/serializers/zip.rbs | 4 +++- 12 files changed, 44 insertions(+), 21 deletions(-) diff --git a/lib/rambling/trie/configuration/properties.rb b/lib/rambling/trie/configuration/properties.rb index a40e45d..bb4c459 100644 --- a/lib/rambling/trie/configuration/properties.rb +++ b/lib/rambling/trie/configuration/properties.rb @@ -46,8 +46,11 @@ def reset attr_writer :readers, :serializers def reset_readers - plain_text_reader = Rambling::Trie::Readers::PlainText.new - @readers = Rambling::Trie::Configuration::ProviderCollection.new :reader, txt: plain_text_reader + @readers = Rambling::Trie::Configuration::ProviderCollection.new :reader, default_reader_providers + end + + def default_reader_providers + {txt: Rambling::Trie::Readers::PlainText.new } end def reset_serializers diff --git a/lib/rambling/trie/nodes/node.rb b/lib/rambling/trie/nodes/node.rb index d9ddbb1..d687012 100644 --- a/lib/rambling/trie/nodes/node.rb +++ b/lib/rambling/trie/nodes/node.rb @@ -52,6 +52,8 @@ def first_child # rubocop:disable Lint/UnreachableLoop children_tree.each_value { |child| return child } # rubocop:enable Lint/UnreachableLoop + + nil end # Indicates if the current node is the root node. diff --git a/sig/lib/rambling/trie.rbs b/sig/lib/rambling/trie.rbs index 1141c7e..23cdaba 100644 --- a/sig/lib/rambling/trie.rbs +++ b/sig/lib/rambling/trie.rbs @@ -4,24 +4,24 @@ module Rambling @properties: Configuration::Properties - def create: (String?, Readers::Reader?) { (Container) -> void } -> Container + def self.create: (String?, Readers::Reader?) { (Container) -> void } -> Container - def load: (String, Serializers::Serializer[untyped]?) -> Container + def self.load: (String, Serializers::Serializer[Nodes::Node]?) -> Container - def dump: (Container, String, Serializers::Serializer[untyped]?) -> void + def self.dump: (Container, String, Serializers::Serializer[Nodes::Node]?) -> void - def config: { (Configuration::Properties) -> void } -> Configuration::Properties + def self.config: { (Configuration::Properties) -> void } -> Configuration::Properties private - def properties: -> untyped + def self.properties: -> Configuration::Properties - def readers: -> untyped + def self.readers: -> Configuration::ProviderCollection[Readers::Reader] - def serializers: -> untyped + def self.serializers: -> Configuration::ProviderCollection[Serializers::Serializer[Nodes::Node]] - def compressor: -> untyped + def self.compressor: -> Compressor - def root_builder: -> ^() -> Nodes::Node + def self.root_builder: -> ^() -> Nodes::Node end end diff --git a/sig/lib/rambling/trie/compressor.rbs b/sig/lib/rambling/trie/compressor.rbs index 963fdd5..25664ee 100644 --- a/sig/lib/rambling/trie/compressor.rbs +++ b/sig/lib/rambling/trie/compressor.rbs @@ -13,7 +13,7 @@ module Rambling def compress_children: (Hash[Symbol, Nodes::Node]) -> Hash[Symbol, Nodes::Node] - def new_compressed_node: (Symbol?, Nodes::Node?, Hash[Symbol, Nodes::Node], bool?) -> untyped + def new_compressed_node: (Symbol?, Nodes::Node?, Hash[Symbol, Nodes::Node], bool?) -> Nodes::Compressed end end end diff --git a/sig/lib/rambling/trie/configuration/properties.rbs b/sig/lib/rambling/trie/configuration/properties.rbs index 75d04ec..29e0808 100644 --- a/sig/lib/rambling/trie/configuration/properties.rbs +++ b/sig/lib/rambling/trie/configuration/properties.rbs @@ -3,20 +3,24 @@ module Rambling module Configuration class Properties attr_reader readers: ProviderCollection[Readers::Reader] - attr_reader serializers: ProviderCollection[Serializers::Serializer[untyped]] + attr_reader serializers: ProviderCollection[Serializers::Serializer[Nodes::Node]] attr_accessor compressor: Compressor attr_accessor root_builder: ^() -> Nodes::Node attr_accessor tmp_path: String + def initialize: -> void + def reset: -> void private attr_writer readers: ProviderCollection[Readers::Reader] - attr_writer serializers: ProviderCollection[Serializers::Serializer[untyped]] + attr_writer serializers: ProviderCollection[Serializers::Serializer[Nodes::Node]] def reset_readers: -> void + def default_reader_providers: -> Hash[Symbol, Readers::Reader] + def reset_serializers: -> void end end diff --git a/sig/lib/rambling/trie/configuration/provider_collection.rbs b/sig/lib/rambling/trie/configuration/provider_collection.rbs index a8255ee..e17a547 100644 --- a/sig/lib/rambling/trie/configuration/provider_collection.rbs +++ b/sig/lib/rambling/trie/configuration/provider_collection.rbs @@ -7,6 +7,8 @@ module Rambling attr_reader name: Symbol attr_reader default: TProvider? + def initialize: (Symbol, Hash[Symbol, TProvider], ?TProvider?) -> void + def []: (Symbol) -> TProvider def add: (Symbol, TProvider) -> TProvider @@ -32,7 +34,7 @@ module Rambling def file_format: (String) -> Symbol - def contains?: (TProvider) -> bool + def contains?: (TProvider?) -> bool alias provider_instances values end diff --git a/sig/lib/rambling/trie/container.rbs b/sig/lib/rambling/trie/container.rbs index 25284a0..a47693d 100644 --- a/sig/lib/rambling/trie/container.rbs +++ b/sig/lib/rambling/trie/container.rbs @@ -5,6 +5,8 @@ module Rambling attr_reader root: Nodes::Node + def initialize: (Nodes::Node, Compressor) { (Container) -> void } -> void + def add: (String) -> Nodes::Node def concat: (Array[String]) -> Array[Nodes::Node] @@ -13,7 +15,7 @@ module Rambling def compress: -> Container - def each: -> (Enumerator[String, void] | Nodes::Node) + def each: -> (Enumerator[String, void] | Enumerable) def partial_word?: (String) -> bool @@ -53,7 +55,7 @@ module Rambling attr_reader compressor: Compressor attr_writer root: Nodes::Node - def words_within_root: (String) -> (Enumerator[String, void] | Numeric) + def words_within_root: (String) { (String) -> void } -> (Enumerator[String, void] | Numeric) def compress_root: -> Nodes::Compressed diff --git a/sig/lib/rambling/trie/enumerable.rbs b/sig/lib/rambling/trie/enumerable.rbs index 31938ca..ab1b5b0 100644 --- a/sig/lib/rambling/trie/enumerable.rbs +++ b/sig/lib/rambling/trie/enumerable.rbs @@ -1,7 +1,7 @@ module Rambling module Trie module Enumerable - include ::Enumerable[Nodes::Node] + include ::Enumerable[String] alias size count diff --git a/sig/lib/rambling/trie/nodes/compressed.rbs b/sig/lib/rambling/trie/nodes/compressed.rbs index 2452374..ceb06c7 100644 --- a/sig/lib/rambling/trie/nodes/compressed.rbs +++ b/sig/lib/rambling/trie/nodes/compressed.rbs @@ -14,7 +14,7 @@ module Rambling def closest_node: (Array[String | Symbol]) -> Node - def children_match_prefix: (Array[String | Symbol]) -> Enumerator[String, void] + def children_match_prefix: (Array[String | Symbol]) { (String) -> void } -> Enumerator[String, void]? end end end diff --git a/sig/lib/rambling/trie/nodes/node.rbs b/sig/lib/rambling/trie/nodes/node.rbs index add5a65..c3e68a5 100644 --- a/sig/lib/rambling/trie/nodes/node.rbs +++ b/sig/lib/rambling/trie/nodes/node.rbs @@ -2,10 +2,18 @@ module Rambling module Trie module Nodes class Node + include Compressible + include Enumerable + include Comparable + include Stringifyable + include Inspectable + attr_reader letter: Symbol? attr_accessor children_tree: Hash[Symbol, Node] attr_accessor parent: Node? + def initialize: (Symbol?, Node?, ?Hash[Symbol, Node]) -> void + def children: -> Array[Node] def first_child: -> Node? diff --git a/sig/lib/rambling/trie/nodes/raw.rbs b/sig/lib/rambling/trie/nodes/raw.rbs index 8ca1b78..8e3abc0 100644 --- a/sig/lib/rambling/trie/nodes/raw.rbs +++ b/sig/lib/rambling/trie/nodes/raw.rbs @@ -18,7 +18,7 @@ module Rambling def closest_node: (Array[String | Symbol]) -> Node - def children_match_prefix: (Array[String | Symbol]) -> Enumerator[String, void] + def children_match_prefix: (Array[String | Symbol]) { (String) -> void } -> Enumerator[String, void]? end end end diff --git a/sig/lib/rambling/trie/serializers/zip.rbs b/sig/lib/rambling/trie/serializers/zip.rbs index 51b25f3..083d0da 100644 --- a/sig/lib/rambling/trie/serializers/zip.rbs +++ b/sig/lib/rambling/trie/serializers/zip.rbs @@ -4,11 +4,13 @@ module Rambling class Zip < Serializer[Nodes::Node] @properties: Configuration::Properties + def initialize: (Configuration::Properties) -> void + private attr_reader properties: Configuration::Properties - def serializers: -> Configuration::ProviderCollection[Serializer[untyped]] + def serializers: -> Configuration::ProviderCollection[Serializer[Nodes::Node]] def tmp_path: -> String From 4282e88fe902cf9374a96bc39ee5acb5b42e7438 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Thu, 8 Feb 2024 15:01:48 -0500 Subject: [PATCH 08/18] Add protected methods to node; fix Array[String] sigs --- lib/rambling/trie/container.rb | 2 ++ lib/rambling/trie/nodes/node.rb | 2 +- lib/rambling/trie/nodes/raw.rb | 2 +- sig/lib/rambling/trie/container.rbs | 2 +- sig/lib/rambling/trie/nodes/missing.rbs | 1 + sig/lib/rambling/trie/nodes/node.rbs | 15 ++++++++++++++- sig/lib/rambling/trie/nodes/raw.rbs | 8 ++++---- 7 files changed, 24 insertions(+), 8 deletions(-) diff --git a/lib/rambling/trie/container.rb b/lib/rambling/trie/container.rb index 2932447..662cad9 100644 --- a/lib/rambling/trie/container.rb +++ b/lib/rambling/trie/container.rb @@ -196,6 +196,8 @@ def words_within_root phrase yield word end end + + nil end def compress_root diff --git a/lib/rambling/trie/nodes/node.rb b/lib/rambling/trie/nodes/node.rb index d687012..d0a495c 100644 --- a/lib/rambling/trie/nodes/node.rb +++ b/lib/rambling/trie/nodes/node.rb @@ -108,7 +108,7 @@ def scan chars end # Returns all words that match a prefix of any length within chars. - # @param [String] chars the chars to base the prefix on. + # @param [Array[String]] chars the chars to base the prefix on. # @return [Enumerator] all the words that match a prefix by chars. # @yield [String] each word found. def match_prefix chars diff --git a/lib/rambling/trie/nodes/raw.rb b/lib/rambling/trie/nodes/raw.rb index 95f8a98..e3833c3 100644 --- a/lib/rambling/trie/nodes/raw.rb +++ b/lib/rambling/trie/nodes/raw.rb @@ -7,7 +7,7 @@ module Nodes class Raw < Rambling::Trie::Nodes::Node # Adds a word to the current raw (uncompressed) trie node. # @param [Array] chars the char array to add to the trie. - # @return [Raw] the added/modified node based on the word added. + # @return [Node] the added/modified node based on the word added. # @note This method clears the contents of the chars variable. def add chars if chars.empty? diff --git a/sig/lib/rambling/trie/container.rbs b/sig/lib/rambling/trie/container.rbs index a47693d..5d41b01 100644 --- a/sig/lib/rambling/trie/container.rbs +++ b/sig/lib/rambling/trie/container.rbs @@ -55,7 +55,7 @@ module Rambling attr_reader compressor: Compressor attr_writer root: Nodes::Node - def words_within_root: (String) { (String) -> void } -> (Enumerator[String, void] | Numeric) + def words_within_root: (String) { (String) -> void } -> (Enumerator[String, void]?) def compress_root: -> Nodes::Compressed diff --git a/sig/lib/rambling/trie/nodes/missing.rbs b/sig/lib/rambling/trie/nodes/missing.rbs index 15171cc..f84d9c4 100644 --- a/sig/lib/rambling/trie/nodes/missing.rbs +++ b/sig/lib/rambling/trie/nodes/missing.rbs @@ -2,6 +2,7 @@ module Rambling module Trie module Nodes class Missing < Node + def initialize: -> void end end end diff --git a/sig/lib/rambling/trie/nodes/node.rbs b/sig/lib/rambling/trie/nodes/node.rbs index c3e68a5..7979f01 100644 --- a/sig/lib/rambling/trie/nodes/node.rbs +++ b/sig/lib/rambling/trie/nodes/node.rbs @@ -14,11 +14,13 @@ module Rambling def initialize: (Symbol?, Node?, ?Hash[Symbol, Node]) -> void + def add: (Array[Symbol]) -> Node + def children: -> Array[Node] def first_child: -> Node? - def match_prefix: (String) { (String) -> void } -> Enumerator[String, void] + def match_prefix: (Array[String]) { (String) -> void } -> Enumerator[String, void]? def root?: -> bool @@ -44,10 +46,21 @@ module Rambling alias has_key? key? + private def missing: -> Node + def partial_word_chars?: (Array[String]) -> bool + + def word_chars?: (Array[String]) -> bool + + def closest_node: (Array[String]) -> Node + + def children_match_prefix: (Array[String]) { (String) -> void } -> Enumerator[String, void]? + + def compressed?: -> bool + attr_accessor terminal: bool? end end diff --git a/sig/lib/rambling/trie/nodes/raw.rbs b/sig/lib/rambling/trie/nodes/raw.rbs index 8e3abc0..556c0e0 100644 --- a/sig/lib/rambling/trie/nodes/raw.rbs +++ b/sig/lib/rambling/trie/nodes/raw.rbs @@ -12,13 +12,13 @@ module Rambling def new_node: (Symbol) -> Node - def partial_word_chars?: (Array[String | Symbol]) -> bool + def partial_word_chars?: (Array[String]) -> bool - def word_chars?: (Array[String | Symbol]) -> bool + def word_chars?: (Array[String]) -> bool - def closest_node: (Array[String | Symbol]) -> Node + def closest_node: (Array[String]) -> Node - def children_match_prefix: (Array[String | Symbol]) { (String) -> void } -> Enumerator[String, void]? + def children_match_prefix: (Array[String]) { (String) -> void } -> Enumerator[String, void]? end end end From c33315777c52e8536fffe03a0f988f371e3a9134 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Thu, 8 Feb 2024 16:20:56 -0500 Subject: [PATCH 09/18] Add abstract methods so that it does not complain about missing methods --- sig/lib/rambling/trie/comparable.rbs | 10 ++++++++++ sig/lib/rambling/trie/compressible.rbs | 10 ++++++++++ sig/lib/rambling/trie/enumerable.rbs | 10 ++++++++++ sig/lib/rambling/trie/inspectable.rbs | 8 ++++++++ sig/lib/rambling/trie/nodes/node.rbs | 13 +++++++------ sig/lib/rambling/trie/stringifyable.rbs | 12 ++++++++++++ 6 files changed, 57 insertions(+), 6 deletions(-) diff --git a/sig/lib/rambling/trie/comparable.rbs b/sig/lib/rambling/trie/comparable.rbs index 0caa833..7b2a6e6 100644 --- a/sig/lib/rambling/trie/comparable.rbs +++ b/sig/lib/rambling/trie/comparable.rbs @@ -2,6 +2,16 @@ module Rambling module Trie module Comparable def ==: (Nodes::Node) -> bool + + private + + # abstract methods + + def letter: -> Symbol + + def terminal?: -> bool + + def children_tree: -> Hash[Symbol, Nodes::Node] end end end diff --git a/sig/lib/rambling/trie/compressible.rbs b/sig/lib/rambling/trie/compressible.rbs index aba910e..774335c 100644 --- a/sig/lib/rambling/trie/compressible.rbs +++ b/sig/lib/rambling/trie/compressible.rbs @@ -2,6 +2,16 @@ module Rambling module Trie module Compressible def compressible?: -> bool + + private + + # abstract methods + + def root?: -> bool + + def terminal?: -> bool + + def children_tree: -> Hash[Symbol, Nodes::Node] end end end diff --git a/sig/lib/rambling/trie/enumerable.rbs b/sig/lib/rambling/trie/enumerable.rbs index ab1b5b0..d2f8ad0 100644 --- a/sig/lib/rambling/trie/enumerable.rbs +++ b/sig/lib/rambling/trie/enumerable.rbs @@ -6,6 +6,16 @@ module Rambling alias size count def each: { (String) -> void } -> (Enumerator[String, void] | Enumerable) + + private + + # abstract methods + + def as_word: -> String + + def terminal?: -> bool + + def children_tree: -> Hash[Symbol, Nodes::Node] end end end diff --git a/sig/lib/rambling/trie/inspectable.rbs b/sig/lib/rambling/trie/inspectable.rbs index a4ceb09..600e2a2 100644 --- a/sig/lib/rambling/trie/inspectable.rbs +++ b/sig/lib/rambling/trie/inspectable.rbs @@ -14,6 +14,14 @@ module Rambling def terminal_inspect: -> String def children_inspect: -> String + + # abstract methods + + def letter: -> Symbol + + def terminal: -> bool? + + def children_tree: -> Hash[Symbol, Nodes::Node] end end end diff --git a/sig/lib/rambling/trie/nodes/node.rbs b/sig/lib/rambling/trie/nodes/node.rbs index 7979f01..b5d739d 100644 --- a/sig/lib/rambling/trie/nodes/node.rbs +++ b/sig/lib/rambling/trie/nodes/node.rbs @@ -12,7 +12,7 @@ module Rambling attr_accessor children_tree: Hash[Symbol, Node] attr_accessor parent: Node? - def initialize: (Symbol?, Node?, ?Hash[Symbol, Node]) -> void + def initialize: (?Symbol?, ?Node?, ?Hash[Symbol, Node]) -> void def add: (Array[Symbol]) -> Node @@ -32,6 +32,8 @@ module Rambling def letter=: (String | Symbol?) -> Symbol? + def compressed?: -> bool + def partial_word?: (Array[String]) -> bool def word?: (Array[String]) -> bool @@ -46,11 +48,14 @@ module Rambling alias has_key? key? - private def missing: -> Node + attr_accessor terminal: bool? + + # abstract methods + def partial_word_chars?: (Array[String]) -> bool def word_chars?: (Array[String]) -> bool @@ -58,10 +63,6 @@ module Rambling def closest_node: (Array[String]) -> Node def children_match_prefix: (Array[String]) { (String) -> void } -> Enumerator[String, void]? - - def compressed?: -> bool - - attr_accessor terminal: bool? end end end diff --git a/sig/lib/rambling/trie/stringifyable.rbs b/sig/lib/rambling/trie/stringifyable.rbs index cc1dda9..e012c9a 100644 --- a/sig/lib/rambling/trie/stringifyable.rbs +++ b/sig/lib/rambling/trie/stringifyable.rbs @@ -4,6 +4,18 @@ module Rambling def as_word: -> String def to_s: -> String + + private + + # abstract methods + + def letter: -> Symbol + + def terminal?: -> bool + + def parent: -> Nodes::Node? + + def children_tree: -> Hash[Symbol, Nodes::Node] end end end From fa4b963ce4be0f47b15494c35966c26c3824b076 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Thu, 8 Feb 2024 16:51:21 -0500 Subject: [PATCH 10/18] Optional block and assignee --- sig/lib/rambling/trie/configuration/provider_collection.rbs | 2 +- sig/lib/rambling/trie/container.rbs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sig/lib/rambling/trie/configuration/provider_collection.rbs b/sig/lib/rambling/trie/configuration/provider_collection.rbs index e17a547..27a7f85 100644 --- a/sig/lib/rambling/trie/configuration/provider_collection.rbs +++ b/sig/lib/rambling/trie/configuration/provider_collection.rbs @@ -13,7 +13,7 @@ module Rambling def add: (Symbol, TProvider) -> TProvider - def default=: (TProvider) -> TProvider + def default=: (TProvider?) -> TProvider? def formats: -> Array[Symbol] diff --git a/sig/lib/rambling/trie/container.rbs b/sig/lib/rambling/trie/container.rbs index 5d41b01..677b951 100644 --- a/sig/lib/rambling/trie/container.rbs +++ b/sig/lib/rambling/trie/container.rbs @@ -55,7 +55,7 @@ module Rambling attr_reader compressor: Compressor attr_writer root: Nodes::Node - def words_within_root: (String) { (String) -> void } -> (Enumerator[String, void]?) + def words_within_root: (String) ?{ (String) -> void } -> (Enumerator[String, void]?) def compress_root: -> Nodes::Compressed From 97d80d23db68d9dfde3b3a24460e1ea217d4c931 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Thu, 8 Feb 2024 16:58:19 -0500 Subject: [PATCH 11/18] Handle nils in compressor --- lib/rambling/trie/compressor.rb | 7 ++++++- sig/lib/rambling/trie/compressor.rbs | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/rambling/trie/compressor.rb b/lib/rambling/trie/compressor.rb index b729189..c919d7b 100644 --- a/lib/rambling/trie/compressor.rb +++ b/lib/rambling/trie/compressor.rb @@ -8,6 +8,8 @@ class Compressor # @param [Nodes::Node] node the node to compress. # @return [Nodes::Compressed] node the compressed version of the node. def compress node + return if node.nil? + if node.compressible? compress_child_and_merge node else @@ -22,8 +24,11 @@ def compress_child_and_merge node end def merge node, other - letter = node.letter.to_s << other.letter.to_s + if other.nil? + return new_compressed_node node.letter, node.parent, node.children_tree, node.terminal? + end + letter = node.letter.to_s << other.letter.to_s new_compressed_node letter.to_sym, node.parent, other.children_tree, other.terminal? end diff --git a/sig/lib/rambling/trie/compressor.rbs b/sig/lib/rambling/trie/compressor.rbs index 25664ee..96181b9 100644 --- a/sig/lib/rambling/trie/compressor.rbs +++ b/sig/lib/rambling/trie/compressor.rbs @@ -1,13 +1,13 @@ module Rambling module Trie class Compressor - def compress: (Nodes::Node) -> Nodes::Compressed + def compress: (Nodes::Node?) -> Nodes::Compressed? private def compress_child_and_merge: (Nodes::Node) -> Nodes::Compressed - def merge: (Nodes::Node, Nodes::Node) -> Nodes::Compressed + def merge: (Nodes::Node, Nodes::Node?) -> Nodes::Compressed def compress_children_and_copy: (Nodes::Node) -> Nodes::Compressed From 52657dd273f2ff9cdb0b899bc421aeb8551b3fa6 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Fri, 9 Feb 2024 13:09:57 -0500 Subject: [PATCH 12/18] Add yaml and securerandom libraries to Steepfile --- Steepfile | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Steepfile b/Steepfile index 27e4f12..b8aa0e9 100644 --- a/Steepfile +++ b/Steepfile @@ -3,13 +3,17 @@ target :lib do signature 'sig' - check 'lib' # Directory name -# check 'Gemfile' # File name -# check 'app/models/**/*.rb' # Glob -# # ignore 'lib/templates/*.rb' -# -# # library 'pathname' # Standard libraries -# # library 'strong_json' # Gems + check 'lib' + # check 'tasks' + + # check 'Gemfile' + # check 'Guardfile' + # check 'Rakefile' + # check 'Steepfile' + + # library 'rubyzip' + library 'yaml' + library 'securerandom' # # # configure_code_diagnostics(D::Ruby.default) # `default` diagnostics setting (applies by default) # # configure_code_diagnostics(D::Ruby.strict) # `strict` diagnostics setting From f87076dd1cd4d00b20e29d9579d4f38f8ee7ae3a Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Fri, 9 Feb 2024 13:10:29 -0500 Subject: [PATCH 13/18] Add rubyzip types (rubyzip does not have them defined) --- sig/lib/zip/entry.rbs | 11 +++++++++++ sig/lib/zip/file.rbs | 11 +++++++++++ 2 files changed, 22 insertions(+) create mode 100644 sig/lib/zip/entry.rbs create mode 100644 sig/lib/zip/file.rbs diff --git a/sig/lib/zip/entry.rbs b/sig/lib/zip/entry.rbs new file mode 100644 index 0000000..1a4f54c --- /dev/null +++ b/sig/lib/zip/entry.rbs @@ -0,0 +1,11 @@ +module Zip + class Entry + include Enumerable[Entry] + + def name: -> String + + def extract: (String) -> void + + def each: ?{ (Entry) -> void } -> (Enumerator[Entry, void])? + end +end \ No newline at end of file diff --git a/sig/lib/zip/file.rbs b/sig/lib/zip/file.rbs new file mode 100644 index 0000000..bd38cfa --- /dev/null +++ b/sig/lib/zip/file.rbs @@ -0,0 +1,11 @@ +module Zip + class File + CREATE: bool + + def self.open: [TContent] (String, ?bool?) { (File) -> TContent } -> TContent + + def entries: -> Array[Entry] + + def add: (String, String) -> void + end +end \ No newline at end of file From 54f535fe0970b9f8de3c69a1bb30bda8e7fa8adb Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Fri, 9 Feb 2024 13:11:51 -0500 Subject: [PATCH 14/18] Mark blocks as optional --- lib/rambling/trie/serializers/zip.rb | 4 ++++ sig/lib/rambling/trie.rbs | 6 +++--- sig/lib/rambling/trie/container.rbs | 6 ++++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/rambling/trie/serializers/zip.rb b/lib/rambling/trie/serializers/zip.rb index 2f01886..d85a4d3 100644 --- a/lib/rambling/trie/serializers/zip.rb +++ b/lib/rambling/trie/serializers/zip.rb @@ -26,6 +26,10 @@ def load filepath ::Zip::File.open filepath do |zip| entry = zip.entries.first + if entry.nil? + return + end + entry_path = path entry.name entry.extract entry_path diff --git a/sig/lib/rambling/trie.rbs b/sig/lib/rambling/trie.rbs index 23cdaba..ca013aa 100644 --- a/sig/lib/rambling/trie.rbs +++ b/sig/lib/rambling/trie.rbs @@ -4,13 +4,13 @@ module Rambling @properties: Configuration::Properties - def self.create: (String?, Readers::Reader?) { (Container) -> void } -> Container + def self.create: (String?, Readers::Reader?) ?{ (Container) -> void } -> Container - def self.load: (String, Serializers::Serializer[Nodes::Node]?) -> Container + def self.load: (String, Serializers::Serializer[Nodes::Node]?) ?{ (Container) -> void } -> Container def self.dump: (Container, String, Serializers::Serializer[Nodes::Node]?) -> void - def self.config: { (Configuration::Properties) -> void } -> Configuration::Properties + def self.config: ?{ (Configuration::Properties) -> void } -> Configuration::Properties private diff --git a/sig/lib/rambling/trie/container.rbs b/sig/lib/rambling/trie/container.rbs index 677b951..4f89a01 100644 --- a/sig/lib/rambling/trie/container.rbs +++ b/sig/lib/rambling/trie/container.rbs @@ -1,11 +1,13 @@ module Rambling module Trie class Container + include ::Enumerable[String] + @compressor: Compressor attr_reader root: Nodes::Node - def initialize: (Nodes::Node, Compressor) { (Container) -> void } -> void + def initialize: (Nodes::Node, Compressor) ?{ (Container) -> void } -> void def add: (String) -> Nodes::Node @@ -15,7 +17,7 @@ module Rambling def compress: -> Container - def each: -> (Enumerator[String, void] | Enumerable) + def each: { (String) -> void } -> (Enumerator[String, void] | Enumerable) def partial_word?: (String) -> bool From 7f922ae37bcf6916e3c7fac1f47e9cfc786edf1c Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Fri, 9 Feb 2024 13:12:12 -0500 Subject: [PATCH 15/18] Make TContents for providers nilable --- sig/lib/rambling/trie/configuration/provider_collection.rbs | 6 +++++- sig/lib/rambling/trie/serializers/serializer.rbs | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/sig/lib/rambling/trie/configuration/provider_collection.rbs b/sig/lib/rambling/trie/configuration/provider_collection.rbs index 27a7f85..8d8b497 100644 --- a/sig/lib/rambling/trie/configuration/provider_collection.rbs +++ b/sig/lib/rambling/trie/configuration/provider_collection.rbs @@ -1,7 +1,11 @@ module Rambling module Trie module Configuration - class ProviderCollection[TProvider] + class ProviderCollection[TProvider < _Nilable] + interface _Nilable + def nil?: -> bool + end + @providers: Hash[Symbol, TProvider] attr_reader name: Symbol diff --git a/sig/lib/rambling/trie/serializers/serializer.rbs b/sig/lib/rambling/trie/serializers/serializer.rbs index f05100b..8cc0c38 100644 --- a/sig/lib/rambling/trie/serializers/serializer.rbs +++ b/sig/lib/rambling/trie/serializers/serializer.rbs @@ -2,7 +2,7 @@ module Rambling module Trie module Serializers class Serializer[TContents] - def load: (String) -> TContents + def load: (String) -> TContents? def dump: (TContents, String) -> Numeric end end From 5d23ba5ac015a0f4c8407f7e4ff65b235166739e Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Fri, 9 Feb 2024 13:12:32 -0500 Subject: [PATCH 16/18] Always use Array[String] for chars --- sig/lib/rambling/trie/nodes/compressed.rbs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sig/lib/rambling/trie/nodes/compressed.rbs b/sig/lib/rambling/trie/nodes/compressed.rbs index ceb06c7..d0e2269 100644 --- a/sig/lib/rambling/trie/nodes/compressed.rbs +++ b/sig/lib/rambling/trie/nodes/compressed.rbs @@ -8,13 +8,13 @@ module Rambling private - def partial_word_chars?: (Array[String | Symbol]) -> bool + def partial_word_chars?: (Array[String]) -> bool - def word_chars?: (Array[String | Symbol]) -> bool + def word_chars?: (Array[String]) -> bool - def closest_node: (Array[String | Symbol]) -> Node + def closest_node: (Array[String]) -> Node - def children_match_prefix: (Array[String | Symbol]) { (String) -> void } -> Enumerator[String, void]? + def children_match_prefix: (Array[String]) { (String) -> void } -> Enumerator[String, void]? end end end From 69e6015d897b9cec247507850d2905a21316fd4e Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Fri, 9 Feb 2024 13:13:27 -0500 Subject: [PATCH 17/18] Use steep check for ruby type lint --- .github/workflows/ruby.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ruby.yml b/.github/workflows/ruby.yml index 7f5dd8b..91baef0 100644 --- a/.github/workflows/ruby.yml +++ b/.github/workflows/ruby.yml @@ -23,8 +23,8 @@ jobs: bundler-cache: true - name: Run rubocop run: bundle exec rubocop - - name: Run rbs - run: bundle exec rbs validate lib/**/*.rb + - name: Run rbs + steep + run: bundle exec steep check spec: runs-on: ubuntu-latest strategy: From 743518eecd6e7dfa664bb3d52ffee4cc544664d2 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Fri, 9 Feb 2024 15:24:35 -0500 Subject: [PATCH 18/18] Use main branch for .github/workflows --- .github/workflows/codeql.yml | 4 ++-- .github/workflows/dependency-review.yml | 2 +- .github/workflows/ruby.yml | 4 ++-- .github/workflows/semgrep.yml | 1 - 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index db3011f..1a7a94a 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -14,10 +14,10 @@ name: codeql on: push: branches: - - master + - main pull_request: branches: - - master + - main schedule: - cron: '45 10 * * 6' diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 666d208..7fba61f 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -8,7 +8,7 @@ name: dependency-review on: pull_request: branches: - - master + - main permissions: contents: read diff --git a/.github/workflows/ruby.yml b/.github/workflows/ruby.yml index 91baef0..a54e2b6 100644 --- a/.github/workflows/ruby.yml +++ b/.github/workflows/ruby.yml @@ -3,10 +3,10 @@ name: build on: push: branches: - - master + - main pull_request: branches: - - master + - main permissions: contents: read diff --git a/.github/workflows/semgrep.yml b/.github/workflows/semgrep.yml index 5b0c0c3..a94a8e1 100644 --- a/.github/workflows/semgrep.yml +++ b/.github/workflows/semgrep.yml @@ -5,7 +5,6 @@ on: push: branches: - main - - master paths: - .github/workflows/semgrep.yml schedule: