sord 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/Gemfile +0 -2
 - data/Gemfile.lock +3 -3
 - data/lib/sord/logging.rb +11 -0
 - data/lib/sord/rbi_generator.rb +5 -4
 - data/lib/sord/type_converter.rb +34 -8
 - data/lib/sord/version.rb +1 -1
 - data/sord.gemspec +1 -0
 - metadata +15 -1
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 9a20a16fb8b21d103c934ed6f4846db387ab40174ebe9468b33ec70b82c8c883
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 235f786ea4950554c1c78a9887c40218efdb1cafdf2b281ca5d923af2130eaf5
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: e4c45eef8d708353b0a1817b273c7a548799fed3380e5ad76a0744e6c51b02d9b5d139e31a9aac49bfafc9936a4cecf8f0098a9911b2cda556b9c8456bb3cde9
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 47f885d8222de2169f987e603cc46b949475046439a7d7e7e312ecb09e9d1510459a59e1621622e967d185b5855cdd5face4a984cf825a1a17256e7ed0876186
         
     | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/Gemfile.lock
    CHANGED
    
    | 
         @@ -1,8 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            PATH
         
     | 
| 
       2 
2 
     | 
    
         
             
              remote: .
         
     | 
| 
       3 
3 
     | 
    
         
             
              specs:
         
     | 
| 
       4 
     | 
    
         
            -
                sord (0. 
     | 
| 
      
 4 
     | 
    
         
            +
                sord (0.4.1)
         
     | 
| 
       5 
5 
     | 
    
         
             
                  colorize
         
     | 
| 
      
 6 
     | 
    
         
            +
                  commander (~> 4.4)
         
     | 
| 
       6 
7 
     | 
    
         
             
                  sorbet-runtime
         
     | 
| 
       7 
8 
     | 
    
         
             
                  yard
         
     | 
| 
       8 
9 
     | 
    
         | 
| 
         @@ -37,7 +38,7 @@ GEM 
     | 
|
| 
       37 
38 
     | 
    
         
             
                simplecov-html (0.10.2)
         
     | 
| 
       38 
39 
     | 
    
         
             
                sorbet (0.4.4254)
         
     | 
| 
       39 
40 
     | 
    
         
             
                  sorbet-static (= 0.4.4254)
         
     | 
| 
       40 
     | 
    
         
            -
                sorbet-runtime (0.4. 
     | 
| 
      
 41 
     | 
    
         
            +
                sorbet-runtime (0.4.4294)
         
     | 
| 
       41 
42 
     | 
    
         
             
                sorbet-static (0.4.4254-x86_64-linux)
         
     | 
| 
       42 
43 
     | 
    
         
             
                yard (0.9.19)
         
     | 
| 
       43 
44 
     | 
    
         | 
| 
         @@ -46,7 +47,6 @@ PLATFORMS 
     | 
|
| 
       46 
47 
     | 
    
         | 
| 
       47 
48 
     | 
    
         
             
            DEPENDENCIES
         
     | 
| 
       48 
49 
     | 
    
         
             
              bundler (~> 2.0)
         
     | 
| 
       49 
     | 
    
         
            -
              commander (~> 4.4)
         
     | 
| 
       50 
50 
     | 
    
         
             
              rake (~> 10.0)
         
     | 
| 
       51 
51 
     | 
    
         
             
              rspec (~> 3.0)
         
     | 
| 
       52 
52 
     | 
    
         
             
              simplecov
         
     | 
    
        data/lib/sord/logging.rb
    CHANGED
    
    | 
         @@ -53,6 +53,17 @@ module Sord 
     | 
|
| 
       53 
53 
     | 
    
         
             
                  generic(:warn, '[WARN ]'.yellow, msg, item)
         
     | 
| 
       54 
54 
     | 
    
         
             
                end
         
     | 
| 
       55 
55 
     | 
    
         | 
| 
      
 56 
     | 
    
         
            +
                # Print a duck-typing message. This should be used when the YARD 
         
     | 
| 
      
 57 
     | 
    
         
            +
                # documentation contains duck typing, which isn't supported by Sorbet, so
         
     | 
| 
      
 58 
     | 
    
         
            +
                # it is substituted for something different.
         
     | 
| 
      
 59 
     | 
    
         
            +
                # @param [String] msg The log message to write.
         
     | 
| 
      
 60 
     | 
    
         
            +
                # @param [YARD::CodeObjects::Base] item The CodeObject which this log 
         
     | 
| 
      
 61 
     | 
    
         
            +
                #  is associated with, if any. This is shown before the log message if it is
         
     | 
| 
      
 62 
     | 
    
         
            +
                #  specified.
         
     | 
| 
      
 63 
     | 
    
         
            +
                def self.duck(msg, item=nil)
         
     | 
| 
      
 64 
     | 
    
         
            +
                  generic(:ducl, '[DUCK ]'.cyan, msg, item)
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
       56 
67 
     | 
    
         
             
                # Print an error message. This should be used for things which require the
         
     | 
| 
       57 
68 
     | 
    
         
             
                # current process to stop.
         
     | 
| 
       58 
69 
     | 
    
         
             
                # @param [String] msg The log message to write.
         
     | 
    
        data/lib/sord/rbi_generator.rb
    CHANGED
    
    | 
         @@ -75,16 +75,17 @@ module Sord 
     | 
|
| 
       75 
75 
     | 
    
         | 
| 
       76 
76 
     | 
    
         
             
                    # This is better than iterating over YARD's "@param" tags directly 
         
     | 
| 
       77 
77 
     | 
    
         
             
                    # because it includes parameters without documentation
         
     | 
| 
      
 78 
     | 
    
         
            +
                    # (The gsubs allow for better splat-argument compatibility)
         
     | 
| 
       78 
79 
     | 
    
         
             
                    parameter_names_to_tags = meth.parameters.map do |name, _|
         
     | 
| 
       79 
     | 
    
         
            -
                      [name, meth.tags('param') 
     | 
| 
      
 80 
     | 
    
         
            +
                      [name, meth.tags('param')
         
     | 
| 
      
 81 
     | 
    
         
            +
                        .find { |p| p.name.gsub('*', '') == name.gsub('*', '') }]
         
     | 
| 
       80 
82 
     | 
    
         
             
                    end.to_h
         
     | 
| 
       81 
83 
     | 
    
         | 
| 
       82 
84 
     | 
    
         
             
                    sig_params_list = parameter_names_to_tags.map do |name, tag|
         
     | 
| 
      
 85 
     | 
    
         
            +
                      name = name.gsub('*', '')
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
       83 
87 
     | 
    
         
             
                      if tag
         
     | 
| 
       84 
88 
     | 
    
         
             
                        "#{name}: #{TypeConverter.yard_to_sorbet(tag.types, meth)}"
         
     | 
| 
       85 
     | 
    
         
            -
                      elsif name.start_with? '*'
         
     | 
| 
       86 
     | 
    
         
            -
                        # TODO: is there a YARD definition for this?
         
     | 
| 
       87 
     | 
    
         
            -
                        "args: T::Array[T.any]"
         
     | 
| 
       88 
89 
     | 
    
         
             
                      elsif name.start_with? '&'
         
     | 
| 
       89 
90 
     | 
    
         
             
                        # Cut the ampersand from the block parameter name.
         
     | 
| 
       90 
91 
     | 
    
         
             
                        "#{name[1..-1]}: T.untyped"
         
     | 
    
        data/lib/sord/type_converter.rb
    CHANGED
    
    | 
         @@ -11,12 +11,14 @@ module Sord 
     | 
|
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
                # A regular expression which matches a Ruby namespace immediately followed
         
     | 
| 
       13 
13 
     | 
    
         
             
                # by another Ruby namespace in angle brackets. This is the format usually
         
     | 
| 
       14 
     | 
    
         
            -
                # used in YARD to model generic types, such as "Array<String>" 
     | 
| 
      
 14 
     | 
    
         
            +
                # used in YARD to model generic types, such as "Array<String>",
         
     | 
| 
      
 15 
     | 
    
         
            +
                # "Hash<String, Symbol>", "Hash{String => Symbol}", etc.
         
     | 
| 
       15 
16 
     | 
    
         
             
                GENERIC_TYPE_REGEX =
         
     | 
| 
       16 
     | 
    
         
            -
                  /(#{SIMPLE_TYPE_REGEX})\s 
     | 
| 
      
 17 
     | 
    
         
            +
                  /(#{SIMPLE_TYPE_REGEX})\s*[<{]\s*(.*)\s*[>}]/
         
     | 
| 
       17 
18 
     | 
    
         | 
| 
       18 
19 
     | 
    
         
             
                # An array of built-in generic types supported by Sorbet.
         
     | 
| 
       19 
20 
     | 
    
         
             
                SORBET_SUPPORTED_GENERIC_TYPES = %w{Array Set Enumerable Enumerator Range Hash}
         
     | 
| 
      
 21 
     | 
    
         
            +
                SORBET_SINGLE_ARG_GENERIC_TYPES = %w{Array Set Enumerable Enumerator Range}
         
     | 
| 
       20 
22 
     | 
    
         | 
| 
       21 
23 
     | 
    
         
             
                # Given a string of YARD type parameters (without angle brackets), splits
         
     | 
| 
       22 
24 
     | 
    
         
             
                # the string into an array of each type parameter.
         
     | 
| 
         @@ -31,10 +33,15 @@ module Sord 
     | 
|
| 
       31 
33 
     | 
    
         
             
                  while character_pointer < params.length
         
     | 
| 
       32 
34 
     | 
    
         
             
                    should_buffer = true
         
     | 
| 
       33 
35 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
                    current_bracketing_level += 1 if params[character_pointer] 
     | 
| 
       35 
     | 
    
         
            -
                     
     | 
| 
      
 36 
     | 
    
         
            +
                    current_bracketing_level += 1 if ['<', '{'].include?(params[character_pointer])
         
     | 
| 
      
 37 
     | 
    
         
            +
                    # Decrease bracketing level by 1 when encountering `>` or `}`, unless
         
     | 
| 
      
 38 
     | 
    
         
            +
                    # the previous character is `=` (to prevent hash rockets from causing
         
     | 
| 
      
 39 
     | 
    
         
            +
                    # nesting problems).
         
     | 
| 
      
 40 
     | 
    
         
            +
                    current_bracketing_level -= 1 if ['>', '}'].include?(params[character_pointer]) && params[character_pointer - 1] != '='
         
     | 
| 
       36 
41 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
                     
     | 
| 
      
 42 
     | 
    
         
            +
                    # Handle commas as separators.
         
     | 
| 
      
 43 
     | 
    
         
            +
                    # e.g. Hash<Symbol, String>
         
     | 
| 
      
 44 
     | 
    
         
            +
                    if params[character_pointer] == ','
         
     | 
| 
       38 
45 
     | 
    
         
             
                      if current_bracketing_level == 0
         
     | 
| 
       39 
46 
     | 
    
         
             
                        result << buffer.strip
         
     | 
| 
       40 
47 
     | 
    
         
             
                        buffer = ""
         
     | 
| 
         @@ -42,6 +49,17 @@ module Sord 
     | 
|
| 
       42 
49 
     | 
    
         
             
                      end
         
     | 
| 
       43 
50 
     | 
    
         
             
                    end
         
     | 
| 
       44 
51 
     | 
    
         | 
| 
      
 52 
     | 
    
         
            +
                    # Handle hash rockets as separators.
         
     | 
| 
      
 53 
     | 
    
         
            +
                    # e.g. Hash<Symbol => String>
         
     | 
| 
      
 54 
     | 
    
         
            +
                    if params[character_pointer] == '=' && params[character_pointer + 1] == '>'
         
     | 
| 
      
 55 
     | 
    
         
            +
                      if current_bracketing_level == 0
         
     | 
| 
      
 56 
     | 
    
         
            +
                        character_pointer += 1
         
     | 
| 
      
 57 
     | 
    
         
            +
                        result << buffer.strip
         
     | 
| 
      
 58 
     | 
    
         
            +
                        buffer = ""
         
     | 
| 
      
 59 
     | 
    
         
            +
                        should_buffer = false
         
     | 
| 
      
 60 
     | 
    
         
            +
                      end
         
     | 
| 
      
 61 
     | 
    
         
            +
                    end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
       45 
63 
     | 
    
         
             
                    buffer += params[character_pointer] if should_buffer
         
     | 
| 
       46 
64 
     | 
    
         
             
                    character_pointer += 1
         
     | 
| 
       47 
65 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -80,13 +98,21 @@ module Sord 
     | 
|
| 
       80 
98 
     | 
    
         
             
                      Logging.warn("#{yard} is probably not a type, but using anyway", item)
         
     | 
| 
       81 
99 
     | 
    
         
             
                    end
         
     | 
| 
       82 
100 
     | 
    
         
             
                    yard
         
     | 
| 
      
 101 
     | 
    
         
            +
                  when /^\##{SIMPLE_TYPE_REGEX}$/
         
     | 
| 
      
 102 
     | 
    
         
            +
                    Logging.duck("#{yard} looks like a duck type, replacing with T.untyped", item)
         
     | 
| 
      
 103 
     | 
    
         
            +
                    'T.untyped'
         
     | 
| 
       83 
104 
     | 
    
         
             
                  when /^#{GENERIC_TYPE_REGEX}$/
         
     | 
| 
       84 
105 
     | 
    
         
             
                    generic_type = $1
         
     | 
| 
       85 
106 
     | 
    
         
             
                    type_parameters = $2
         
     | 
| 
       86 
107 
     | 
    
         | 
| 
       87 
108 
     | 
    
         
             
                    if SORBET_SUPPORTED_GENERIC_TYPES.include?(generic_type)
         
     | 
| 
       88 
     | 
    
         
            -
                       
     | 
| 
       89 
     | 
    
         
            -
                         
     | 
| 
      
 109 
     | 
    
         
            +
                      parameters = split_type_parameters(type_parameters)
         
     | 
| 
      
 110 
     | 
    
         
            +
                        .map { |x| yard_to_sorbet(x, item) }
         
     | 
| 
      
 111 
     | 
    
         
            +
                      if SORBET_SINGLE_ARG_GENERIC_TYPES.include?(generic_type) && parameters.length > 1
         
     | 
| 
      
 112 
     | 
    
         
            +
                        "T::#{generic_type}[T.any(#{parameters.join(', ')})]"
         
     | 
| 
      
 113 
     | 
    
         
            +
                      else
         
     | 
| 
      
 114 
     | 
    
         
            +
                        "T::#{generic_type}[#{parameters.join(', ')}]"
         
     | 
| 
      
 115 
     | 
    
         
            +
                      end
         
     | 
| 
       90 
116 
     | 
    
         
             
                    else
         
     | 
| 
       91 
117 
     | 
    
         
             
                      Logging.warn("unsupported generic type #{generic_type.inspect} in #{yard.inspect}", item)
         
     | 
| 
       92 
118 
     | 
    
         
             
                      "SORD_ERROR_#{generic_type.gsub(/[^0-9A-Za-z_]/i, '')}"
         
     | 
| 
         @@ -97,4 +123,4 @@ module Sord 
     | 
|
| 
       97 
123 
     | 
    
         
             
                  end
         
     | 
| 
       98 
124 
     | 
    
         
             
                end
         
     | 
| 
       99 
125 
     | 
    
         
             
              end
         
     | 
| 
       100 
     | 
    
         
            -
            end
         
     | 
| 
      
 126 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/sord/version.rb
    CHANGED
    
    
    
        data/sord.gemspec
    CHANGED
    
    | 
         @@ -25,6 +25,7 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       25 
25 
     | 
    
         
             
              spec.add_dependency 'yard'
         
     | 
| 
       26 
26 
     | 
    
         
             
              spec.add_dependency 'sorbet-runtime'
         
     | 
| 
       27 
27 
     | 
    
         
             
              spec.add_dependency 'colorize'
         
     | 
| 
      
 28 
     | 
    
         
            +
              spec.add_dependency 'commander', '~> 4.4'
         
     | 
| 
       28 
29 
     | 
    
         | 
| 
       29 
30 
     | 
    
         
             
              spec.add_development_dependency "bundler", "~> 2.0"
         
     | 
| 
       30 
31 
     | 
    
         
             
              spec.add_development_dependency "rake", "~> 10.0"
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: sord
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.5.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Aaron Christiansen
         
     | 
| 
         @@ -52,6 +52,20 @@ dependencies: 
     | 
|
| 
       52 
52 
     | 
    
         
             
                - - ">="
         
     | 
| 
       53 
53 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       54 
54 
     | 
    
         
             
                    version: '0'
         
     | 
| 
      
 55 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 56 
     | 
    
         
            +
              name: commander
         
     | 
| 
      
 57 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 58 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 59 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 60 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 61 
     | 
    
         
            +
                    version: '4.4'
         
     | 
| 
      
 62 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 63 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 64 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 65 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 66 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 67 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 68 
     | 
    
         
            +
                    version: '4.4'
         
     | 
| 
       55 
69 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       56 
70 
     | 
    
         
             
              name: bundler
         
     | 
| 
       57 
71 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     |