decode 0.13.0 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bake/decode/index.rb +1 -1
- data/lib/decode/comment/attribute.rb +61 -0
- data/lib/decode/comment/node.rb +90 -0
- data/lib/decode/comment/parameter.rb +62 -0
- data/lib/decode/comment/pragma.rb +50 -0
- data/lib/decode/comment/raises.rb +32 -0
- data/lib/decode/comment/returns.rb +32 -0
- data/lib/decode/comment/tag.rb +50 -0
- data/lib/decode/comment/tags.rb +80 -0
- data/lib/decode/comment/text.rb +37 -0
- data/lib/decode/comment/throws.rb +32 -0
- data/lib/decode/comment/yields.rb +52 -0
- data/lib/decode/definition.rb +18 -17
- data/lib/decode/documentation.rb +21 -66
- data/lib/decode/index.rb +7 -7
- data/lib/decode/language/generic.rb +2 -2
- data/lib/decode/language/reference.rb +11 -3
- data/lib/decode/language/ruby.rb +35 -6
- data/lib/decode/language/ruby/class.rb +2 -2
- data/lib/decode/language/ruby/definition.rb +1 -1
- data/lib/decode/language/ruby/parser.rb +9 -1
- data/lib/decode/language/ruby/segment.rb +1 -1
- data/lib/decode/segment.rb +4 -4
- data/lib/decode/trie.rb +12 -12
- data/lib/decode/version.rb +1 -1
- metadata +15 -11
- data/.github/workflows/development.yml +0 -50
- data/.gitignore +0 -13
- data/.rspec +0 -2
- data/README.md +0 -47
- data/decode.gemspec +0 -33
- data/gems.rb +0 -3
- data/guides/extract-symbols/extract.rb +0 -26
@@ -62,13 +62,13 @@ module Decode
|
|
62
62
|
# A Ruby-specific singleton class.
|
63
63
|
class Singleton < Definition
|
64
64
|
# A singleton class is a container for other definitions.
|
65
|
-
# @
|
65
|
+
# @returns [Boolean]
|
66
66
|
def container?
|
67
67
|
true
|
68
68
|
end
|
69
69
|
|
70
70
|
# Typically, a singleton class does not contain other definitions.
|
71
|
-
# @
|
71
|
+
# @returns [Boolean]
|
72
72
|
def nested?
|
73
73
|
false
|
74
74
|
end
|
@@ -207,7 +207,7 @@ module Decode
|
|
207
207
|
end
|
208
208
|
|
209
209
|
KIND_ATTRIBUTE = /\A
|
210
|
-
(@(?<kind>
|
210
|
+
(@(?<kind>attribute)\s+(?<value>.*?))|
|
211
211
|
(@define\s+(?<kind>)\s+(?<value>.*?))
|
212
212
|
\Z/x
|
213
213
|
|
@@ -279,6 +279,14 @@ module Decode
|
|
279
279
|
end
|
280
280
|
|
281
281
|
yield segment if segment
|
282
|
+
else
|
283
|
+
# One top level segment:
|
284
|
+
segment = Segment.new(
|
285
|
+
extract_comments_for(node, comments),
|
286
|
+
Ruby, node
|
287
|
+
)
|
288
|
+
|
289
|
+
yield segment
|
282
290
|
end
|
283
291
|
end
|
284
292
|
end
|
data/lib/decode/segment.rb
CHANGED
@@ -35,15 +35,15 @@ module Decode
|
|
35
35
|
end
|
36
36
|
|
37
37
|
# The preceeding comments.
|
38
|
-
# @
|
38
|
+
# @attribute [Array(String)]
|
39
39
|
attr :comments
|
40
40
|
|
41
41
|
# The language of the code attached to this segment.
|
42
|
-
# @
|
42
|
+
# @attribute [Language]
|
43
43
|
attr :language
|
44
44
|
|
45
45
|
# An interface for accsssing the documentation of the definition.
|
46
|
-
# @
|
46
|
+
# @returns [Documentation | nil] A {Documentation} instance if this definition has comments.
|
47
47
|
def documentation
|
48
48
|
if @comments&.any?
|
49
49
|
@documentation ||= Documentation.new(@comments, @language)
|
@@ -51,7 +51,7 @@ module Decode
|
|
51
51
|
end
|
52
52
|
|
53
53
|
# The source code trailing the comments.
|
54
|
-
# @
|
54
|
+
# @returns [String | nil]
|
55
55
|
def code
|
56
56
|
end
|
57
57
|
end
|
data/lib/decode/trie.rb
CHANGED
@@ -31,17 +31,17 @@ module Decode
|
|
31
31
|
end
|
32
32
|
|
33
33
|
# A mutable array of all values that terminate at this node.
|
34
|
-
# @
|
34
|
+
# @attribute [Array]
|
35
35
|
attr_accessor :values
|
36
36
|
|
37
37
|
# A hash table of all children nodes, indexed by name.
|
38
|
-
# @
|
38
|
+
# @attribute [Hash(String, Node)]
|
39
39
|
attr :children
|
40
40
|
|
41
41
|
# Look up a lexical path starting at this node.
|
42
42
|
#
|
43
|
-
# @
|
44
|
-
# @
|
43
|
+
# @parameter path [Array(String)] The path to resolve.
|
44
|
+
# @returns [Node | Nil]
|
45
45
|
def lookup(path, index = 0)
|
46
46
|
if index < path.size
|
47
47
|
if child = @children[path[index]]
|
@@ -55,9 +55,9 @@ module Decode
|
|
55
55
|
# Traverse the trie from this node.
|
56
56
|
# Invoke `descend.call` to traverse the children of the current node.
|
57
57
|
#
|
58
|
-
# @
|
58
|
+
# @parameter path [Array(String)] The current lexical path.
|
59
59
|
#
|
60
|
-
# @block
|
60
|
+
# @block {|path, node, descend| descend.call}
|
61
61
|
# @yield path [Array(String)] The current lexical path.
|
62
62
|
# @yield node [Node] The current node which is being traversed.
|
63
63
|
# @yield descend [Proc] The recursive method for traversing children.
|
@@ -76,12 +76,12 @@ module Decode
|
|
76
76
|
end
|
77
77
|
|
78
78
|
# The root of the trie.
|
79
|
-
# @
|
79
|
+
# @attribute [Node]
|
80
80
|
attr :root
|
81
81
|
|
82
82
|
# Insert the specified value at the given path into the trie.
|
83
|
-
# @
|
84
|
-
# @
|
83
|
+
# @parameter path [Array(String)] The lexical path where the value will be inserted.
|
84
|
+
# @parameter value [Object] The value to insert.
|
85
85
|
def insert(path, value)
|
86
86
|
node = @root
|
87
87
|
|
@@ -94,15 +94,15 @@ module Decode
|
|
94
94
|
|
95
95
|
# Lookup the values at the specified path.
|
96
96
|
#
|
97
|
-
# @
|
98
|
-
# @
|
97
|
+
# @parameter path [Array(String)] The lexical path which contains the values.
|
98
|
+
# @returns [Array(Object) | Nil] The values that existed (or not) at the specified path.
|
99
99
|
def lookup(path)
|
100
100
|
@root.lookup(path)
|
101
101
|
end
|
102
102
|
|
103
103
|
# Enumerate all lexical scopes under the specified path.
|
104
104
|
#
|
105
|
-
# @block
|
105
|
+
# @block {|path, values| ...}
|
106
106
|
# @yield path [Array(String)] The lexical path.
|
107
107
|
# @yield values [Array(Object)] The values that exist at the given path.
|
108
108
|
def each(path = [], &block)
|
data/lib/decode/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: decode
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05-
|
11
|
+
date: 2020-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|
@@ -115,15 +115,19 @@ executables: []
|
|
115
115
|
extensions: []
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
|
-
- ".github/workflows/development.yml"
|
119
|
-
- ".gitignore"
|
120
|
-
- ".rspec"
|
121
|
-
- README.md
|
122
118
|
- bake/decode/index.rb
|
123
|
-
- decode.gemspec
|
124
|
-
- gems.rb
|
125
|
-
- guides/extract-symbols/extract.rb
|
126
119
|
- lib/decode.rb
|
120
|
+
- lib/decode/comment/attribute.rb
|
121
|
+
- lib/decode/comment/node.rb
|
122
|
+
- lib/decode/comment/parameter.rb
|
123
|
+
- lib/decode/comment/pragma.rb
|
124
|
+
- lib/decode/comment/raises.rb
|
125
|
+
- lib/decode/comment/returns.rb
|
126
|
+
- lib/decode/comment/tag.rb
|
127
|
+
- lib/decode/comment/tags.rb
|
128
|
+
- lib/decode/comment/text.rb
|
129
|
+
- lib/decode/comment/throws.rb
|
130
|
+
- lib/decode/comment/yields.rb
|
127
131
|
- lib/decode/definition.rb
|
128
132
|
- lib/decode/documentation.rb
|
129
133
|
- lib/decode/index.rb
|
@@ -159,9 +163,9 @@ require_paths:
|
|
159
163
|
- lib
|
160
164
|
required_ruby_version: !ruby/object:Gem::Requirement
|
161
165
|
requirements:
|
162
|
-
- - "
|
166
|
+
- - "~>"
|
163
167
|
- !ruby/object:Gem::Version
|
164
|
-
version: 2.
|
168
|
+
version: '2.5'
|
165
169
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
170
|
requirements:
|
167
171
|
- - ">="
|
@@ -1,50 +0,0 @@
|
|
1
|
-
name: Development
|
2
|
-
|
3
|
-
on: [push, pull_request]
|
4
|
-
|
5
|
-
jobs:
|
6
|
-
test:
|
7
|
-
runs-on: ${{matrix.os}}-latest
|
8
|
-
continue-on-error: ${{matrix.experimental}}
|
9
|
-
|
10
|
-
strategy:
|
11
|
-
matrix:
|
12
|
-
os:
|
13
|
-
- ubuntu
|
14
|
-
|
15
|
-
ruby:
|
16
|
-
- 2.5
|
17
|
-
- 2.6
|
18
|
-
- 2.7
|
19
|
-
|
20
|
-
experimental: [false]
|
21
|
-
env: [""]
|
22
|
-
|
23
|
-
include:
|
24
|
-
- os: ubuntu
|
25
|
-
ruby: truffleruby
|
26
|
-
experimental: true
|
27
|
-
- os: ubuntu
|
28
|
-
ruby: jruby
|
29
|
-
experimental: true
|
30
|
-
- os: ubuntu
|
31
|
-
ruby: head
|
32
|
-
experimental: true
|
33
|
-
- os: ubuntu
|
34
|
-
ruby: 2.6
|
35
|
-
experimental: false
|
36
|
-
env: COVERAGE=PartialSummary,Coveralls
|
37
|
-
|
38
|
-
steps:
|
39
|
-
- uses: actions/checkout@v1
|
40
|
-
- uses: ruby/setup-ruby@v1
|
41
|
-
with:
|
42
|
-
ruby-version: ${{matrix.ruby}}
|
43
|
-
|
44
|
-
- name: Install dependencies
|
45
|
-
run: ${{matrix.env}} bundle install
|
46
|
-
|
47
|
-
- name: Run tests
|
48
|
-
timeout-minutes: 5
|
49
|
-
run: |
|
50
|
-
${{matrix.env}} bundle exec rspec
|
data/.gitignore
DELETED
data/.rspec
DELETED
data/README.md
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
# Decode
|
2
|
-
|
3
|
-
A Ruby code analysis tool and documentation generator.
|
4
|
-
|
5
|
-
[![Development](https://github.com/ioquatix/decode/workflows/Development/badge.svg)](https://github.com/ioquatix/decode/actions?workflow=Development)
|
6
|
-
|
7
|
-
## Motivation
|
8
|
-
|
9
|
-
As part of my effort to build [better project documentation](https://github.com/socketry/utopia-project), I needed a better code analysis tool. While less featured than some of the more mature alternatives, this library focuses on the needs of documentation generation, including speed, cross-referencing and (eventually) multi-language support.
|
10
|
-
|
11
|
-
## Usage
|
12
|
-
|
13
|
-
Please see the <a href="https://ioquatix.github.io/decode/">project documentation</a> or run it locally using `bake utopia:project:serve`.
|
14
|
-
|
15
|
-
## Contributing
|
16
|
-
|
17
|
-
We welcome contributions to this project.
|
18
|
-
|
19
|
-
1. Fork it
|
20
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
21
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
22
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
23
|
-
5. Create new Pull Request
|
24
|
-
|
25
|
-
## License
|
26
|
-
|
27
|
-
Released under the MIT license.
|
28
|
-
|
29
|
-
Copyright, 2020, by [Samuel G. D. Williams](http://www.codeotaku.com).
|
30
|
-
|
31
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
32
|
-
of this software and associated documentation files (the "Software"), to deal
|
33
|
-
in the Software without restriction, including without limitation the rights
|
34
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
35
|
-
copies of the Software, and to permit persons to whom the Software is
|
36
|
-
furnished to do so, subject to the following conditions:
|
37
|
-
|
38
|
-
The above copyright notice and this permission notice shall be included in
|
39
|
-
all copies or substantial portions of the Software.
|
40
|
-
|
41
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
42
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
43
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
44
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
45
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
46
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
47
|
-
THE SOFTWARE.
|
data/decode.gemspec
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
|
2
|
-
require_relative 'lib/decode/version'
|
3
|
-
|
4
|
-
Gem::Specification.new do |spec|
|
5
|
-
spec.name = "decode"
|
6
|
-
spec.version = Decode::VERSION
|
7
|
-
spec.authors = ["Samuel Williams"]
|
8
|
-
spec.email = ["samuel.williams@oriontransfer.co.nz"]
|
9
|
-
|
10
|
-
spec.summary = "Code analysis for documentation generation."
|
11
|
-
spec.homepage = "https://github.com/ioquatix/decode"
|
12
|
-
spec.license = "MIT"
|
13
|
-
|
14
|
-
spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
|
15
|
-
|
16
|
-
# Specify which files should be added to the gem when it is released.
|
17
|
-
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
18
|
-
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
19
|
-
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(docs|test|spec|features)/}) }
|
20
|
-
end
|
21
|
-
|
22
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
|
-
spec.require_paths = ["lib"]
|
24
|
-
|
25
|
-
spec.add_dependency "parser"
|
26
|
-
|
27
|
-
spec.add_development_dependency 'build-files'
|
28
|
-
spec.add_development_dependency 'bake-bundler'
|
29
|
-
spec.add_development_dependency 'utopia-project'
|
30
|
-
spec.add_development_dependency 'covered'
|
31
|
-
spec.add_development_dependency 'bundler'
|
32
|
-
spec.add_development_dependency 'rspec'
|
33
|
-
end
|
data/gems.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# This example demonstrates how to extract symbols using the index. An instance of {Decode::Index} is used for loading symbols from source code files. These symbols are available as a flat list and as a trie structure. You can look up specific symbols using a reference using {Decode::Index:lookup}.
|
4
|
-
require_relative '../../lib/decode/index'
|
5
|
-
|
6
|
-
# Firstly, construct the index:
|
7
|
-
index = Decode::Index.new
|
8
|
-
|
9
|
-
# Then, update the index by loading paths from the file system:
|
10
|
-
paths = Dir.glob(File.expand_path("../../lib/**/*.rb", __dir__))
|
11
|
-
index.update(paths)
|
12
|
-
|
13
|
-
# Finally, you can print out the loaded symbols:
|
14
|
-
index.symbols.each do |name, symbol|
|
15
|
-
puts symbol.long_form
|
16
|
-
end
|
17
|
-
|
18
|
-
# Lookup a specific symbol:
|
19
|
-
absolute_reference = Decode::Language::Ruby.reference("Decode::Index:lookup")
|
20
|
-
lookup_symbol = index.lookup(absolute_reference).first
|
21
|
-
puts lookup_symbol.long_form
|
22
|
-
|
23
|
-
# Lookup a method relative to that symbol:
|
24
|
-
relative_reference = Decode::Language::Ruby.reference("trie")
|
25
|
-
trie_attribute = index.lookup(relative_reference, relative_to: lookup_symbol).first
|
26
|
-
puts trie_attribute.long_form
|