objc-dependency-tree-generator 0.1.1 → 0.1.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 789f1301215d8af7c92cf795490ee666a16120db
4
- data.tar.gz: 3f6e9d0ca15893051f4c36629d7cc5a1dcbf3141
3
+ metadata.gz: 9823100e82dd479ef0369ea01c6af44d56a8436d
4
+ data.tar.gz: a7509d113c2a86dd69275197c7d4da30a702ce0c
5
5
  SHA512:
6
- metadata.gz: 75e2cd70268ce82fe23f3321b41ef76e7af24bacf270ca9c029e224735ac95e8a67d1e4ee81b5792624d7f2d7c518794f1f26694712354f0f1684f4bdc37f5a4
7
- data.tar.gz: 596495432e7f2bbb1ce483630269d550b412ab0d41d312348a6a6996aed36fc82afd255ada7b7405754a61c2fe0567403f8d2e21a9d2f6cb7fa04e6900761977
6
+ metadata.gz: 4a4ab14acc9f80042614181f534a72b43bc30b495aa881ba0c034c63ba8250294332302762d9d7172f280a0d3ae7a20533133c008a58164f17e3cb3887a74ae3
7
+ data.tar.gz: 5891dcab4930af269a8eb47c1ffa14fe006d772ae6da88994b503e2d7f7d6bbd9223070610ce57631f87d53018a1e14c84d5cb442c8ad951354650717497a762
@@ -1,5 +1,5 @@
1
1
  require 'helpers/objc_dependency_tree_generator_helper'
2
- require 'swift-ast-dump/swift_ast_parser'
2
+ require 'swift_ast_dump_parser'
3
3
 
4
4
  class SwiftAstDependenciesGenerator
5
5
 
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: objc-dependency-tree-generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Taykalo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-17 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2017-11-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: swift-ast-dump-parser
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.1
13
27
  description: |
14
28
  Tool that allows to generate Objective-C and Swift dependency tree from object files
15
29
  For usages examples run:
@@ -28,7 +42,6 @@ files:
28
42
  - lib/objc_dependency_tree_generator.rb
29
43
  - lib/sourcekitten/sourcekitten_dependencies_generator.rb
30
44
  - lib/swift-ast-dump/swift_ast_dependencies_generator.rb
31
- - lib/swift-ast-dump/swift_ast_parser.rb
32
45
  - lib/swift/swift_dependencies_generator.rb
33
46
  - lib/tree_serializer.rb
34
47
  homepage: https://github.com/PaulTaykalo/objc-dependency-visualizer
@@ -1,218 +0,0 @@
1
- module SwiftAST
2
- autoload :StringScanner, 'strscan'
3
- class Parser
4
- def parse(string)
5
- @scanner = StringScanner.new(string)
6
- node = scan_children.first
7
- node
8
- end
9
-
10
-
11
- def parse_build_log_output(string)
12
- @scanner = StringScanner.new(string)
13
- return unless @scanner.scan_until(/^\(source_file/)
14
-
15
- @scanner.pos = @scanner.pos - 12
16
- children = scan_children
17
-
18
- return if children.empty?
19
- Node.new("ast", [], children)
20
- end
21
-
22
-
23
- def scan_parameters
24
- parameters = []
25
-
26
- while true
27
- @scanner.skip(/\s*/)
28
- parameter = scan_parameter?
29
- break unless parameter
30
- parameters << parameter
31
- end
32
-
33
- parameters
34
- end
35
-
36
- def scan_parameters_from_types
37
- first_param = @scanner.scan(/\d+:/)
38
- return [] unless first_param
39
- return [first_param] + scan_parameters
40
- end
41
-
42
- def scan_children(level = 0)
43
- children = []
44
- while true
45
- return children unless whitespaces = whitespaces_at(level)
46
- node_name = scan_name?
47
- return children if node_name == "source_file" && level != 0 && unscan(node_name + whitespaces)
48
- node_parameters = scan_parameters
49
-
50
- node_children = scan_children(level + 1)
51
-
52
- while next_params = scan_parameters_from_types # these are stupid params alike
53
- break if next_params.empty?
54
- node_parameters += next_params
55
- node_children += scan_children(level + 1)
56
- end
57
- node = Node.new(node_name, node_parameters, node_children)
58
-
59
- children << node
60
- @scanner.scan(/(\s|\\|\n|\r|\t)*\)/)
61
- end
62
- children
63
- end
64
-
65
- def whitespaces_at(level = 0)
66
- whitespaces = @scanner.scan(/(\s|\\|\n|\r|\t)*\(/)
67
- if level == 0 && whitespaces.nil?
68
- whitespaces = @scanner.scan(/.*?\(source_file/m)
69
- return nil unless whitespaces
70
- unscan("source_file")
71
- end
72
- whitespaces
73
- end
74
-
75
- def unscan(string)
76
- @scanner.pos = @scanner.pos - string.length
77
- end
78
-
79
- def scan_name?
80
- el_name = @scanner.scan(/#?[\w:]+/)
81
- el_name
82
- end
83
-
84
- def scan_parameter?(is_parsing_rvalue = false)
85
- #white spaces are skipped
86
-
87
- # scan everything until space or opening sequence like ( < ' ".
88
- # Since we can end up with closing bracket - we alos check for )
89
-
90
- prefix = @scanner.scan(/[^\s()'"\[\\]+/) if is_parsing_rvalue
91
- prefix = @scanner.scan(/[^\s()<'"\[\\=]+/) unless is_parsing_rvalue
92
-
93
- next_char = @scanner.peek(1)
94
- return nil unless next_char
95
- should_unwrap_strings = !is_parsing_rvalue && !prefix
96
-
97
- case next_char
98
- when " " # next parameter
99
- result = prefix
100
- when "\\" # next parameter
101
- @scanner.scan(/./)
102
- result = prefix
103
-
104
- when "\n" # next parameter
105
- result = prefix
106
- when ")" # closing bracket == end of element
107
- result = prefix
108
- when "\"" # doube quoted string
109
- result = @scanner.scan(/./) + @scanner.scan_until(/"/)
110
- result = result[1..-2] if should_unwrap_strings
111
- result = (prefix || "") + result
112
- when "'" # single quoted string
113
- result = @scanner.scan(/./) + @scanner.scan_until(/'/)
114
- result = result[1..-2] if should_unwrap_strings
115
- result = (prefix || "") + result + (scan_parameter?(is_parsing_rvalue) || "")
116
- when "<" # kinda generic
117
- result = (prefix || "") + @scanner.scan(/./)
118
- #in some cases this can be last char, just because we can end up with a=sdsd.function.<
119
- result += @scanner.scan_until(/>/) + (scan_parameter?(is_parsing_rvalue) || "")
120
- when "("
121
- return nil if !prefix && !is_parsing_rvalue
122
- result = (prefix || "") + @scanner.scan_until(/\)/) + (scan_parameter?(is_parsing_rvalue) || "")
123
- when "["
124
- result = (prefix || "") + scan_range + (scan_parameter?(is_parsing_rvalue) || "")
125
- when "="
126
- result = prefix + @scanner.scan(/./) + (scan_parameter?(true) || "")
127
-
128
- end
129
-
130
- # puts "prefix is '#{prefix}' ||#{is_parsing_rvalue} result =#{result}"
131
-
132
- result
133
-
134
- end
135
-
136
- def scan_range
137
- return unless @scanner.peek(1) == "["
138
- result = @scanner.scan(/./)
139
-
140
- while true
141
- inside = @scanner.scan(/[^\]\[]+/) #everything but [ or ]
142
- result += inside || ""
143
- next_char = @scanner.peek(1)
144
-
145
- return result + @scanner.scan(/./) if next_char == "]" # we found the end
146
- result += scan_range if next_char == "["
147
- raise "Unexpected character #{next_char} - [ or ] expected" if next_char != "[" && next_char != "]"
148
- end
149
-
150
- end
151
-
152
- def scan_line_and_column
153
- @scanner.scan(/:\d+:\d+/)
154
- end
155
-
156
- def isalpha(str)
157
- !str.match(/[^A-Za-z@_]/)
158
- end
159
- def isAlphaDigit(str)
160
- !str.match(/[^A-Za-z@_0-9]/)
161
- end
162
- def isalphaOrDot(str)
163
- !str.match(/[^A-Za-z@_.,]/)
164
- end
165
-
166
-
167
- end
168
-
169
- class Node
170
-
171
- def initialize(name, parameters = [], children = [])
172
- @name = name
173
- @parameters = parameters
174
- @children = children
175
- end
176
-
177
- def name
178
- @name
179
- end
180
-
181
- def parameters
182
- @parameters
183
- end
184
-
185
- def children
186
- @children
187
- end
188
-
189
- def dump(level = 0)
190
- @@line = 0 if level == 0
191
- puts "\n" if level == 0
192
- puts " " * level + "[#{@@line}][#{@name} #{@parameters}"
193
- @@line = @@line + 1
194
- @children.each { |child| child.dump(level + 1) }
195
- end
196
-
197
- def find_nodes(type)
198
- found_nodes = []
199
- @children.each { |child|
200
- if child.name == type
201
- found_nodes << child
202
- else
203
- found_nodes += child.find_nodes(type)
204
- end
205
- }
206
- found_nodes
207
- end
208
-
209
- def on_node(type, &block)
210
- @children.each { |child|
211
- yield child if child.name == type
212
- child.on_node(type, &block)
213
- }
214
- end
215
-
216
- end
217
-
218
- end