lib/yard/code_objects/namespace_mapper.rb in yard-0.9.18 vs lib/yard/code_objects/namespace_mapper.rb in yard-0.9.19

- old
+ new

@@ -1,114 +1,114 @@ -# frozen_string_literal: true -module YARD - module CodeObjects - # This module controls registration and accessing of namespace separators - # for {Registry} lookup. - # - # @since 0.9.1 - module NamespaceMapper - # @!group Registering a Separator for a Namespace - - # Registers a separator with an optional set of valid types that - # must follow the separator lexically. - # - # @param sep [String] the separator string for the namespace - # @param valid_types [Array<Symbol>] a list of object types that - # must follow the separator. If the list is empty, any type can - # follow the separator. - # @example Registering separators for a method object - # # Anything after a "#" denotes a method object - # register_separator "#", :method - # # Anything after a "." denotes a method object - # register_separator ".", :method - def register_separator(sep, *valid_types) - NamespaceMapper.invalidate - - valid_types.each do |t| - NamespaceMapper.rev_map[t] ||= [] - NamespaceMapper.rev_map[t] << sep - end - - NamespaceMapper.map[sep] ||= [] - NamespaceMapper.map[sep] += valid_types - end - - # Clears the map of separators. - # - # @return [void] - def clear_separators - NamespaceMapper.invalidate - NamespaceMapper.map = {} - NamespaceMapper.rev_map = {} - end - - # Gets or sets the default separator value to use when no - # separator for the namespace can be determined. - # - # @param value [String, nil] the default separator, or nil to return the - # value - # @example - # default_separator "::" - def default_separator(value = nil) - if value - NamespaceMapper.default_separator = Regexp.quote value - else - NamespaceMapper.default_separator - end - end - - # @!group Separator and Type Lookup Helpers - - # @return [Array<String>] all of the registered separators - def separators - NamespaceMapper.map.keys - end - - # @return [Regexp] the regexp match of all separators - def separators_match - NamespaceMapper.map_match - end - - # @param sep [String] the separator to return types for - # @return [Array<Symbol>] a list of types registered to a separator - def types_for_separator(sep) - NamespaceMapper.map[sep] - end - - # @param type [String] the type to return separators for - # @return [Array<Symbol>] a list of separators registered to a type - def separators_for_type(type) - NamespaceMapper.rev_map[type] - end - - # Internal methods to act as a singleton registry - class << self - # @!visibility private - - # @return [Hash] a mapping of types to separators - def map - @map ||= {} - end - - # @return [Hash] a reverse mapping of separators to types - def rev_map - @rev_map ||= {} - end - - # Invalidates all separators - # @return [void] - def invalidate - @map_match = nil - end - - # @return [Regexp] the full list of separators as a regexp match - def map_match - @map_match ||= @map.keys.map {|k| Regexp.quote k }.join('|') - end - - # @return [String] the default separator when no separator can begin - # determined. - attr_accessor :default_separator - end - end - end -end +# frozen_string_literal: true +module YARD + module CodeObjects + # This module controls registration and accessing of namespace separators + # for {Registry} lookup. + # + # @since 0.9.1 + module NamespaceMapper + # @!group Registering a Separator for a Namespace + + # Registers a separator with an optional set of valid types that + # must follow the separator lexically. + # + # @param sep [String] the separator string for the namespace + # @param valid_types [Array<Symbol>] a list of object types that + # must follow the separator. If the list is empty, any type can + # follow the separator. + # @example Registering separators for a method object + # # Anything after a "#" denotes a method object + # register_separator "#", :method + # # Anything after a "." denotes a method object + # register_separator ".", :method + def register_separator(sep, *valid_types) + NamespaceMapper.invalidate + + valid_types.each do |t| + NamespaceMapper.rev_map[t] ||= [] + NamespaceMapper.rev_map[t] << sep + end + + NamespaceMapper.map[sep] ||= [] + NamespaceMapper.map[sep] += valid_types + end + + # Clears the map of separators. + # + # @return [void] + def clear_separators + NamespaceMapper.invalidate + NamespaceMapper.map = {} + NamespaceMapper.rev_map = {} + end + + # Gets or sets the default separator value to use when no + # separator for the namespace can be determined. + # + # @param value [String, nil] the default separator, or nil to return the + # value + # @example + # default_separator "::" + def default_separator(value = nil) + if value + NamespaceMapper.default_separator = Regexp.quote value + else + NamespaceMapper.default_separator + end + end + + # @!group Separator and Type Lookup Helpers + + # @return [Array<String>] all of the registered separators + def separators + NamespaceMapper.map.keys + end + + # @return [Regexp] the regexp match of all separators + def separators_match + NamespaceMapper.map_match + end + + # @param sep [String] the separator to return types for + # @return [Array<Symbol>] a list of types registered to a separator + def types_for_separator(sep) + NamespaceMapper.map[sep] + end + + # @param type [String] the type to return separators for + # @return [Array<Symbol>] a list of separators registered to a type + def separators_for_type(type) + NamespaceMapper.rev_map[type] + end + + # Internal methods to act as a singleton registry + class << self + # @!visibility private + + # @return [Hash] a mapping of types to separators + def map + @map ||= {} + end + + # @return [Hash] a reverse mapping of separators to types + def rev_map + @rev_map ||= {} + end + + # Invalidates all separators + # @return [void] + def invalidate + @map_match = nil + end + + # @return [Regexp] the full list of separators as a regexp match + def map_match + @map_match ||= @map.keys.map {|k| Regexp.quote k }.join('|') + end + + # @return [String] the default separator when no separator can begin + # determined. + attr_accessor :default_separator + end + end + end +end