diff --git a/Library/Homebrew/cli/args.rb b/Library/Homebrew/cli/args.rb index ba341a36f1..49a9940541 100644 --- a/Library/Homebrew/cli/args.rb +++ b/Library/Homebrew/cli/args.rb @@ -68,7 +68,7 @@ module Homebrew def build_from_source_formulae if build_from_source? || self[:HEAD?] || self[:build_bottle?] - named.to_formulae_and_casks.select { |f| f.is_a?(Formula) }.map(&:full_name) + named.to_formulae.map(&:full_name) else [] end diff --git a/Library/Homebrew/cmd/home.rb b/Library/Homebrew/cmd/home.rb index 125aeb8ff1..649c3d09da 100644 --- a/Library/Homebrew/cmd/home.rb +++ b/Library/Homebrew/cmd/home.rb @@ -36,7 +36,9 @@ module Homebrew return end - homepages = args.named.to_formulae_and_casks.map do |formula_or_cask| + # to_formulae_and_casks is typed to possibly return Kegs (but won't without explicitly asking) + formulae_or_casks = T.cast(args.named.to_formulae_and_casks, T::Array[T.any(Formula, Cask::Cask)]) + homepages = formulae_or_casks.map do |formula_or_cask| puts "Opening homepage for #{name_of(formula_or_cask)}" formula_or_cask.homepage end diff --git a/Library/Homebrew/sorbet/parlour.rb b/Library/Homebrew/sorbet/parlour.rb index c33a64dc8c..102df89819 100644 --- a/Library/Homebrew/sorbet/parlour.rb +++ b/Library/Homebrew/sorbet/parlour.rb @@ -1,5 +1,5 @@ -# frozen_string_literal: true # typed: true +# frozen_string_literal: true require_relative "../warnings" Warnings.ignore :parser_syntax do @@ -7,19 +7,21 @@ Warnings.ignore :parser_syntax do end module Homebrew + # Parlour type signature generator helper class for Homebrew. module Parlour extend T::Sig - ROOT_DIR = T.let(Pathname(__dir__).parent.realpath.freeze, Pathname) + ROOT_DIR = T.let(Pathname(__dir__).parent.realpath.freeze, Pathname).freeze sig { returns(T::Array[Parser::AST::Node]) } def self.ast_list - @@ast_list ||= begin + @ast_list ||= begin ast_list = [] parser = Parser::CurrentRuby.new + prune_dirs = %w[sorbet shims test vendor].freeze ROOT_DIR.find do |path| - Find.prune if path.directory? && %w[sorbet shims test vendor].any? { |subdir| path == ROOT_DIR/subdir } + Find.prune if path.directory? && prune_dirs.any? { |subdir| path == ROOT_DIR/subdir } Find.prune if path.file? && path.extname != ".rb" diff --git a/Library/Homebrew/sorbet/parlour/attr.rb b/Library/Homebrew/sorbet/parlour/attr.rb index 8f8c4bf8fd..20be56b7c5 100644 --- a/Library/Homebrew/sorbet/parlour/attr.rb +++ b/Library/Homebrew/sorbet/parlour/attr.rb @@ -1,6 +1,7 @@ -# frozen_string_literal: true # typed: strict +# frozen_string_literal: true +# Parlour type signature generator plugin for Homebrew DSL attributes. class Attr < Parlour::Plugin sig { override.params(root: Parlour::RbiGenerator::Namespace).void } def generate(root) @@ -13,7 +14,7 @@ class Attr < Parlour::Plugin sig { override.returns(T.nilable(String)) } def strictness - return "strict" + "strict" end private @@ -32,7 +33,7 @@ class Attr < Parlour::Plugin traverse_module_name(node).join("::") end - + sig { params(node: Parser::AST::Node).returns(T::Array[T.untyped]) } def find_custom_attr(node) tree = T.let([], T::Array[T.untyped]) @@ -46,15 +47,16 @@ class Attr < Parlour::Plugin elsif node.type == :sclass subtree = find_custom_attr(node.children[1]) return tree if subtree.empty? - + tree << [:sclass, subtree] elsif node.type == :class || node.type == :module element = [] - if node.type == :class + case node.type + when :class element << :class element << extract_module_name(children.shift) element << extract_module_name(children.shift) - elsif node.type == :module + when :module element << :module element << extract_module_name(children.shift) end @@ -69,7 +71,7 @@ class Attr < Parlour::Plugin tree << element elsif node.type == :send && children.shift.nil? method_name = children.shift - if method_name == :attr_rw || method_name == :attr_predicate + if [:attr_rw, :attr_predicate].include?(method_name) children.each do |name_node| tree << [method_name, name_node.children.first.to_s] end @@ -96,7 +98,7 @@ class Attr < Parlour::Plugin name = node.shift name = "self.#{name}" if sclass namespace.create_method(name, parameters: [ - Parlour::RbiGenerator::Parameter.new("arg", type: "T.untyped", default: "T.unsafe(nil)") + Parlour::RbiGenerator::Parameter.new("arg", type: "T.untyped", default: "T.unsafe(nil)"), ], return_type: "T.untyped") when :attr_predicate name = node.shift diff --git a/Library/Homebrew/version.rb b/Library/Homebrew/version.rb index bab7e36e69..9ab1b12f55 100644 --- a/Library/Homebrew/version.rb +++ b/Library/Homebrew/version.rb @@ -39,6 +39,7 @@ class Version when /\A#{PostToken::PATTERN}\z/o then PostToken when /\A#{NumericToken::PATTERN}\z/o then NumericToken when /\A#{StringToken::PATTERN}\z/o then StringToken + else raise "Cannot find a matching token pattern" end.new(val) end diff --git a/Library/Homebrew/yard/ignore_directives.rbi b/Library/Homebrew/yard/ignore_directives.rbi new file mode 100644 index 0000000000..caf505de9c --- /dev/null +++ b/Library/Homebrew/yard/ignore_directives.rbi @@ -0,0 +1,6 @@ +# typed: strict + +module YARD + class Docstring; end + class DocstringParser; end +end