yard-sorbet 0.2.0 → 0.3.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/lib/yard-sorbet.rb +1 -2
 - data/lib/yard-sorbet/sig_handler.rb +21 -25
 - data/lib/yard-sorbet/version.rb +1 -1
 - metadata +17 -17
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: f5a40a71c985d760b358e1a066b2b30b73a244ec47c43546dcbb476135217b6c
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 74d637f5b92f95234f3feaf2ef39050bcb4379c26a735961f4f04d7a29bd7697
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: f92b7ec79d46db5b9abcb3ecb294576fe02874972deeb93f23023fbfebe0bc50c9160d7f11193f93598cb07191ab4a5b3045c27ea5d0bce509fdbef5d9e99a65
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 66ea5ef884b6867b1f4b80a28f5b4ee8ee8c557995be314513c43eb0886fb7a0697c01b9723d3f6a76607dc2108ddbabe7c398b5ceaec16e3693707f0b10b911
         
     | 
    
        data/lib/yard-sorbet.rb
    CHANGED
    
    | 
         @@ -4,8 +4,6 @@ 
     | 
|
| 
       4 
4 
     | 
    
         
             
            require 'sorbet-runtime'
         
     | 
| 
       5 
5 
     | 
    
         
             
            require 'yard'
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
            T::Configuration.default_checked_level = :tests
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
7 
     | 
    
         
             
            # top-level namespace
         
     | 
| 
       10 
8 
     | 
    
         
             
            module YARDSorbet; end
         
     | 
| 
       11 
9 
     | 
    
         | 
| 
         @@ -13,3 +11,4 @@ require_relative 'yard-sorbet/directives' 
     | 
|
| 
       13 
11 
     | 
    
         
             
            require_relative 'yard-sorbet/sig_handler'
         
     | 
| 
       14 
12 
     | 
    
         
             
            require_relative 'yard-sorbet/sig_to_yard'
         
     | 
| 
       15 
13 
     | 
    
         
             
            require_relative 'yard-sorbet/struct_handler'
         
     | 
| 
      
 14 
     | 
    
         
            +
            require_relative 'yard-sorbet/version'
         
     | 
| 
         @@ -6,11 +6,19 @@ class YARDSorbet::SigHandler < YARD::Handlers::Ruby::Base 
     | 
|
| 
       6 
6 
     | 
    
         
             
              extend T::Sig
         
     | 
| 
       7 
7 
     | 
    
         
             
              handles :class, :module, :singleton_class?
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
      
 9 
     | 
    
         
            +
              # A struct that holds the parsed contents of a Sorbet type signature
         
     | 
| 
      
 10 
     | 
    
         
            +
              class ParsedSig < T::Struct
         
     | 
| 
      
 11 
     | 
    
         
            +
                prop :abstract, T::Boolean, default: false
         
     | 
| 
      
 12 
     | 
    
         
            +
                prop :params, T::Hash[String, T::Array[String]], default: {}
         
     | 
| 
      
 13 
     | 
    
         
            +
                prop :return, T.nilable(T::Array[String])
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
       9 
16 
     | 
    
         
             
              PARAM_EXCLUDES = T.let(%i[array call hash].freeze, T::Array[Symbol])
         
     | 
| 
       10 
17 
     | 
    
         
             
              PROCESSABLE_NODES = T.let(%i[def defs command].freeze, T::Array[Symbol])
         
     | 
| 
       11 
18 
     | 
    
         
             
              SIG_EXCLUDES = T.let(%i[array hash].freeze, T::Array[Symbol])
         
     | 
| 
       12 
19 
     | 
    
         
             
              SIG_NODE_TYPES = T.let(%i[call fcall vcall].freeze, T::Array[Symbol])
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              private_constant :ParsedSig, :PARAM_EXCLUDES, :PROCESSABLE_NODES, :SIG_EXCLUDES, :SIG_NODE_TYPES
         
     | 
| 
       14 
22 
     | 
    
         | 
| 
       15 
23 
     | 
    
         
             
              sig { void }
         
     | 
| 
       16 
24 
     | 
    
         
             
              def process
         
     | 
| 
         @@ -56,7 +64,7 @@ class YARDSorbet::SigHandler < YARD::Handlers::Ruby::Base 
     | 
|
| 
       56 
64 
     | 
    
         
             
                enhance_tag(docstring, :abstract, parsed_sig)
         
     | 
| 
       57 
65 
     | 
    
         
             
                enhance_tag(docstring, :return, parsed_sig)
         
     | 
| 
       58 
66 
     | 
    
         
             
                if method_node.type != :command
         
     | 
| 
       59 
     | 
    
         
            -
                  parsed_sig 
     | 
| 
      
 67 
     | 
    
         
            +
                  parsed_sig.params.each do |name, types|
         
     | 
| 
       60 
68 
     | 
    
         
             
                    enhance_param(docstring, name, types)
         
     | 
| 
       61 
69 
     | 
    
         
             
                  end
         
     | 
| 
       62 
70 
     | 
    
         
             
                end
         
     | 
| 
         @@ -77,9 +85,10 @@ class YARDSorbet::SigHandler < YARD::Handlers::Ruby::Base 
     | 
|
| 
       77 
85 
     | 
    
         
             
                docstring.add_tag(tag)
         
     | 
| 
       78 
86 
     | 
    
         
             
              end
         
     | 
| 
       79 
87 
     | 
    
         | 
| 
       80 
     | 
    
         
            -
              sig { params(docstring: YARD::Docstring, type: Symbol, parsed_sig:  
     | 
| 
      
 88 
     | 
    
         
            +
              sig { params(docstring: YARD::Docstring, type: Symbol, parsed_sig: ParsedSig).void }
         
     | 
| 
       81 
89 
     | 
    
         
             
              private def enhance_tag(docstring, type, parsed_sig)
         
     | 
| 
       82 
     | 
    
         
            -
                 
     | 
| 
      
 90 
     | 
    
         
            +
                type_value = parsed_sig.public_send(type)
         
     | 
| 
      
 91 
     | 
    
         
            +
                return if !type_value
         
     | 
| 
       83 
92 
     | 
    
         | 
| 
       84 
93 
     | 
    
         
             
                tag = docstring.tags.find { |t| t.tag_name == type.to_s }
         
     | 
| 
       85 
94 
     | 
    
         
             
                if tag
         
     | 
| 
         @@ -87,33 +96,20 @@ class YARDSorbet::SigHandler < YARD::Handlers::Ruby::Base 
     | 
|
| 
       87 
96 
     | 
    
         
             
                else
         
     | 
| 
       88 
97 
     | 
    
         
             
                  tag = YARD::Tags::Tag.new(type, '')
         
     | 
| 
       89 
98 
     | 
    
         
             
                end
         
     | 
| 
       90 
     | 
    
         
            -
                if  
     | 
| 
       91 
     | 
    
         
            -
                  tag.types =  
     | 
| 
      
 99 
     | 
    
         
            +
                if type_value.is_a?(Array)
         
     | 
| 
      
 100 
     | 
    
         
            +
                  tag.types = type_value
         
     | 
| 
       92 
101 
     | 
    
         
             
                end
         
     | 
| 
       93 
102 
     | 
    
         
             
                docstring.add_tag(tag)
         
     | 
| 
       94 
103 
     | 
    
         
             
              end
         
     | 
| 
       95 
104 
     | 
    
         | 
| 
       96 
     | 
    
         
            -
              sig  
     | 
| 
       97 
     | 
    
         
            -
                params(sig_node: YARD::Parser::Ruby::MethodCallNode)
         
     | 
| 
       98 
     | 
    
         
            -
                  .returns(
         
     | 
| 
       99 
     | 
    
         
            -
                    {
         
     | 
| 
       100 
     | 
    
         
            -
                      abstract: T::Boolean,
         
     | 
| 
       101 
     | 
    
         
            -
                      params: T::Hash[String, T::Array[String]],
         
     | 
| 
       102 
     | 
    
         
            -
                      return: T.nilable(T::Array[String])
         
     | 
| 
       103 
     | 
    
         
            -
                    }
         
     | 
| 
       104 
     | 
    
         
            -
                  )
         
     | 
| 
       105 
     | 
    
         
            -
              end
         
     | 
| 
      
 105 
     | 
    
         
            +
              sig { params(sig_node: YARD::Parser::Ruby::MethodCallNode).returns(ParsedSig) }
         
     | 
| 
       106 
106 
     | 
    
         
             
              private def parse_sig(sig_node)
         
     | 
| 
       107 
     | 
    
         
            -
                parsed =  
     | 
| 
       108 
     | 
    
         
            -
                  abstract: false,
         
     | 
| 
       109 
     | 
    
         
            -
                  params: {},
         
     | 
| 
       110 
     | 
    
         
            -
                  return: nil
         
     | 
| 
       111 
     | 
    
         
            -
                }
         
     | 
| 
      
 107 
     | 
    
         
            +
                parsed = ParsedSig.new
         
     | 
| 
       112 
108 
     | 
    
         
             
                found_params = T.let(false, T::Boolean)
         
     | 
| 
       113 
109 
     | 
    
         
             
                found_return = T.let(false, T::Boolean)
         
     | 
| 
       114 
110 
     | 
    
         
             
                bfs_traverse(sig_node, exclude: SIG_EXCLUDES) do |n|
         
     | 
| 
       115 
111 
     | 
    
         
             
                  if n.source == 'abstract'
         
     | 
| 
       116 
     | 
    
         
            -
                    parsed 
     | 
| 
      
 112 
     | 
    
         
            +
                    parsed.abstract = true
         
     | 
| 
       117 
113 
     | 
    
         
             
                  elsif n.source == 'params' && !found_params
         
     | 
| 
       118 
114 
     | 
    
         
             
                    found_params = true
         
     | 
| 
       119 
115 
     | 
    
         
             
                    sibling = T.must(sibling_node(n))
         
     | 
| 
         @@ -121,14 +117,14 @@ class YARDSorbet::SigHandler < YARD::Handlers::Ruby::Base 
     | 
|
| 
       121 
117 
     | 
    
         
             
                      if p.type == :assoc
         
     | 
| 
       122 
118 
     | 
    
         
             
                        param_name = p.children.first.source[0...-1]
         
     | 
| 
       123 
119 
     | 
    
         
             
                        types = YARDSorbet::SigToYARD.convert(p.children.last)
         
     | 
| 
       124 
     | 
    
         
            -
                        parsed 
     | 
| 
      
 120 
     | 
    
         
            +
                        parsed.params[param_name] = types
         
     | 
| 
       125 
121 
     | 
    
         
             
                      end
         
     | 
| 
       126 
122 
     | 
    
         
             
                    end
         
     | 
| 
       127 
123 
     | 
    
         
             
                  elsif n.source == 'returns' && !found_return
         
     | 
| 
       128 
124 
     | 
    
         
             
                    found_return = true
         
     | 
| 
       129 
     | 
    
         
            -
                    parsed 
     | 
| 
      
 125 
     | 
    
         
            +
                    parsed.return = YARDSorbet::SigToYARD.convert(T.must(sibling_node(n)))
         
     | 
| 
       130 
126 
     | 
    
         
             
                  elsif n.source == 'void'
         
     | 
| 
       131 
     | 
    
         
            -
                    parsed 
     | 
| 
      
 127 
     | 
    
         
            +
                    parsed.return ||= ['void']
         
     | 
| 
       132 
128 
     | 
    
         
             
                  end
         
     | 
| 
       133 
129 
     | 
    
         
             
                end
         
     | 
| 
       134 
130 
     | 
    
         
             
                parsed
         
     | 
    
        data/lib/yard-sorbet/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,29 +1,29 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: yard-sorbet
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.3.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Douglas Eichelberger
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2021- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-03-11 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: codecov
         
     | 
| 
       15 
15 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       16 
16 
     | 
    
         
             
                requirements:
         
     | 
| 
       17 
     | 
    
         
            -
                - - " 
     | 
| 
      
 17 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       18 
18 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       19 
     | 
    
         
            -
                    version: 0 
     | 
| 
      
 19 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       20 
20 
     | 
    
         
             
              type: :development
         
     | 
| 
       21 
21 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       22 
22 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       23 
23 
     | 
    
         
             
                requirements:
         
     | 
| 
       24 
     | 
    
         
            -
                - - " 
     | 
| 
      
 24 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       25 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
     | 
    
         
            -
                    version: 0 
     | 
| 
      
 26 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       27 
27 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       28 
28 
     | 
    
         
             
              name: rake
         
     | 
| 
       29 
29 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -58,28 +58,28 @@ dependencies: 
     | 
|
| 
       58 
58 
     | 
    
         
             
                requirements:
         
     | 
| 
       59 
59 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       60 
60 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       61 
     | 
    
         
            -
                    version: 1. 
     | 
| 
      
 61 
     | 
    
         
            +
                    version: 1.11.0
         
     | 
| 
       62 
62 
     | 
    
         
             
              type: :development
         
     | 
| 
       63 
63 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       64 
64 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       65 
65 
     | 
    
         
             
                requirements:
         
     | 
| 
       66 
66 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       67 
67 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       68 
     | 
    
         
            -
                    version: 1. 
     | 
| 
      
 68 
     | 
    
         
            +
                    version: 1.11.0
         
     | 
| 
       69 
69 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       70 
70 
     | 
    
         
             
              name: rubocop-performance
         
     | 
| 
       71 
71 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       72 
72 
     | 
    
         
             
                requirements:
         
     | 
| 
       73 
73 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       74 
74 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       75 
     | 
    
         
            -
                    version: 1. 
     | 
| 
      
 75 
     | 
    
         
            +
                    version: 1.10.0
         
     | 
| 
       76 
76 
     | 
    
         
             
              type: :development
         
     | 
| 
       77 
77 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       78 
78 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       79 
79 
     | 
    
         
             
                requirements:
         
     | 
| 
       80 
80 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       81 
81 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       82 
     | 
    
         
            -
                    version: 1. 
     | 
| 
      
 82 
     | 
    
         
            +
                    version: 1.10.0
         
     | 
| 
       83 
83 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       84 
84 
     | 
    
         
             
              name: rubocop-rake
         
     | 
| 
       85 
85 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -100,14 +100,14 @@ dependencies: 
     | 
|
| 
       100 
100 
     | 
    
         
             
                requirements:
         
     | 
| 
       101 
101 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       102 
102 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       103 
     | 
    
         
            -
                    version: 2. 
     | 
| 
      
 103 
     | 
    
         
            +
                    version: 2.2.0
         
     | 
| 
       104 
104 
     | 
    
         
             
              type: :development
         
     | 
| 
       105 
105 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       106 
106 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       107 
107 
     | 
    
         
             
                requirements:
         
     | 
| 
       108 
108 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       109 
109 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       110 
     | 
    
         
            -
                    version: 2. 
     | 
| 
      
 110 
     | 
    
         
            +
                    version: 2.2.0
         
     | 
| 
       111 
111 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       112 
112 
     | 
    
         
             
              name: rubocop-sorbet
         
     | 
| 
       113 
113 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -126,16 +126,16 @@ dependencies: 
     | 
|
| 
       126 
126 
     | 
    
         
             
              name: simplecov
         
     | 
| 
       127 
127 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       128 
128 
     | 
    
         
             
                requirements:
         
     | 
| 
       129 
     | 
    
         
            -
                - - " 
     | 
| 
      
 129 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       130 
130 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       131 
     | 
    
         
            -
                    version: '0 
     | 
| 
      
 131 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       132 
132 
     | 
    
         
             
              type: :development
         
     | 
| 
       133 
133 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       134 
134 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       135 
135 
     | 
    
         
             
                requirements:
         
     | 
| 
       136 
     | 
    
         
            -
                - - " 
     | 
| 
      
 136 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       137 
137 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       138 
     | 
    
         
            -
                    version: '0 
     | 
| 
      
 138 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       139 
139 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       140 
140 
     | 
    
         
             
              name: sorbet
         
     | 
| 
       141 
141 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -215,7 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       215 
215 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       216 
216 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       217 
217 
     | 
    
         
             
            requirements: []
         
     | 
| 
       218 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
      
 218 
     | 
    
         
            +
            rubygems_version: 3.1.4
         
     | 
| 
       219 
219 
     | 
    
         
             
            signing_key:
         
     | 
| 
       220 
220 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       221 
221 
     | 
    
         
             
            summary: Create YARD docs from Sorbet type signatures
         
     |