pandan 0.0.1 → 0.0.3
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 +5 -5
- data/.rubocop.yml +8 -1
- data/.ruby-version +1 -0
- data/.travis.yml +8 -0
- data/Gemfile +2 -4
- data/README.md +4 -1
- data/Rakefile +2 -0
- data/bin/pandan +1 -0
- data/lib/pandan.rb +2 -0
- data/lib/pandan/command.rb +2 -0
- data/lib/pandan/command/dependency_graph.rb +8 -1
- data/lib/pandan/command/query.rb +12 -5
- data/lib/pandan/command/targets.rb +2 -0
- data/lib/pandan/graph.rb +45 -19
- data/lib/pandan/parser.rb +23 -3
- data/lib/pandan/version.rb +3 -1
- data/lib/pandan/xcodeproj/user_interface.rb +2 -0
- data/lib/pandan/xcworkspace.rb +2 -0
- data/pandan.gemspec +11 -8
- metadata +61 -32
- data/.rubocop_todo.yml +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7b66ee52e54b7cbf16f22755a11fdf1110daa4e93f1f17ae55794473598a0eb6
|
4
|
+
data.tar.gz: 697195fe39a325e97f3e53eee46c534259b9b84cb8e95f1d67e64f27a55450ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab5c1d84f32c646eecc1351762aa753896844291193002b0f67c2b0840c0c26e04320728df03538c1a6d49509af8b95b4006ff02e39452ec96d29ed66560c4be
|
7
|
+
data.tar.gz: c6bb1cf22ac485a24118700d71d0d883641a05844caf2dd8d47d54b2f5d7f0316c5cce987b93e5d8c874daafc528e678a2b3e63bc2e9b8a72a2322a718a602e1
|
data/.rubocop.yml
CHANGED
@@ -1,12 +1,19 @@
|
|
1
|
-
|
1
|
+
AllCops:
|
2
|
+
TargetRubyVersion: 2.5
|
2
3
|
|
3
4
|
Metrics/LineLength:
|
4
5
|
Max: 120
|
6
|
+
|
5
7
|
Metrics/MethodLength:
|
6
8
|
Max: 20
|
9
|
+
|
7
10
|
Metrics/ModuleLength:
|
8
11
|
Exclude:
|
9
12
|
- "**/*_spec.rb"
|
13
|
+
|
10
14
|
Metrics/BlockLength:
|
11
15
|
Exclude:
|
12
16
|
- "**/*_spec.rb"
|
17
|
+
|
18
|
+
Style/Documentation:
|
19
|
+
Enabled: false
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.5.1
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# Pandan
|
2
2
|
|
3
|
+
[](https://travis-ci.org/xing/pandan)
|
4
|
+
[](http://badge.fury.io/rb/pandan)
|
5
|
+
|
3
6
|
> Pandanus amaryllifolius is a tropical plant in the Pandanus (screwpine) genus, which is commonly known as pandan leaves, and is used widely in South Asian and Southeast Asian cooking as a flavoring.
|
4
7
|
> —[Wikipedia](https://en.wikipedia.org/wiki/Pandanus_amaryllifolius)
|
5
8
|
|
@@ -15,7 +18,7 @@ $ gem install pandan
|
|
15
18
|
|
16
19
|
## Motivation
|
17
20
|
|
18
|
-
At XING, CocoaPods helped us
|
21
|
+
At XING, CocoaPods helped us manage our Objective-C and Swift dependencies for a long time. But as our team grew, it was evident to us that CocoaPods was not the tool we needed anymore. We decided to migrate all our projects to a different setup that uses multiple Xcode projects, targets and xcconfig files under a single workspace. However, we were lacking a tool that would give us dependency information based one the settings already in place in Xcode.
|
19
22
|
|
20
23
|
## Usage
|
21
24
|
|
data/Rakefile
CHANGED
data/bin/pandan
CHANGED
data/lib/pandan.rb
CHANGED
data/lib/pandan/command.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'pandan/command'
|
2
4
|
require 'pandan/parser'
|
3
5
|
require 'pandan/graph'
|
@@ -25,6 +27,7 @@ module Pandan
|
|
25
27
|
@save_gv = argv.flag?('graphviz')
|
26
28
|
@save_png = argv.flag?('image')
|
27
29
|
@filter = argv.option('filter')
|
30
|
+
@filter ||= '.*' # Match everything
|
28
31
|
super
|
29
32
|
end
|
30
33
|
|
@@ -64,9 +67,13 @@ module Pandan
|
|
64
67
|
def graphviz_data(graph)
|
65
68
|
graphviz = GraphViz.new(type: :digraph)
|
66
69
|
|
67
|
-
graph.nodes.
|
70
|
+
graph.nodes.each_value do |node|
|
71
|
+
next unless node.name.match?(/#{@filter}/)
|
72
|
+
|
68
73
|
target_node = graphviz.add_node(node.name)
|
69
74
|
node.neighbors.each do |dependency|
|
75
|
+
next unless dependency.name.match?(/#{@filter}/)
|
76
|
+
|
70
77
|
dep_node = graphviz.add_node(dependency.name)
|
71
78
|
graphviz.add_edge(target_node, dep_node)
|
72
79
|
end
|
data/lib/pandan/command/query.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'pandan/command'
|
2
4
|
require 'pandan/parser'
|
3
5
|
require 'pandan/graph'
|
@@ -13,6 +15,7 @@ module Pandan
|
|
13
15
|
[
|
14
16
|
['--xcworkspace=path/to/workspace', 'If not set, Pandan will try to find a workspace'],
|
15
17
|
['--reverse', 'If set, pandan will output the targets that depend on the argument'],
|
18
|
+
['--implicit-dependencies', 'If set, pandan will look up for linker flags in all build configurations'],
|
16
19
|
['--comma-separated', 'If set, Pandan outputs a comma-separated list instead of multiple lines'],
|
17
20
|
['--filter=expression', 'If set, pandan will select all targets whose name match the regular expression']
|
18
21
|
].concat(super)
|
@@ -27,8 +30,10 @@ module Pandan
|
|
27
30
|
@xcworkspace = argv.option('xcworkspace')
|
28
31
|
@xcworkspace ||= XCWorkspace.find_workspace
|
29
32
|
@reverse = argv.flag?('reverse')
|
33
|
+
@implicit_deps = argv.flag?('implicit-dependencies')
|
30
34
|
@comma_separated = argv.flag?('comma-separated')
|
31
35
|
@filter = argv.option('filter')
|
36
|
+
@filter ||= '.*' # Match everything
|
32
37
|
super
|
33
38
|
end
|
34
39
|
|
@@ -41,14 +46,16 @@ module Pandan
|
|
41
46
|
|
42
47
|
def run
|
43
48
|
parser = Parser.new(@xcworkspace, @filter)
|
44
|
-
targets = parser.all_targets
|
45
49
|
graph = Graph.new(@reverse)
|
50
|
+
targets = parser.all_targets
|
46
51
|
graph.add_target_info(targets)
|
52
|
+
if @implicit_deps
|
53
|
+
ld_flags_info = parser.other_linker_flags
|
54
|
+
graph.add_other_ld_flags_info(ld_flags_info)
|
55
|
+
end
|
47
56
|
deps = graph.resolve_dependencies(@target).map(&:name)
|
48
|
-
|
49
|
-
|
50
|
-
dep.name.include? @filter
|
51
|
-
end
|
57
|
+
deps.select! do |dep|
|
58
|
+
dep =~ /#{@filter}/
|
52
59
|
end
|
53
60
|
|
54
61
|
if @comma_separated
|
data/lib/pandan/graph.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'xcodeproj'
|
2
4
|
require 'pandan/xcodeproj/user_interface.rb'
|
3
5
|
|
@@ -27,22 +29,21 @@ module Pandan
|
|
27
29
|
def add_target_info(targets)
|
28
30
|
targets.each do |target|
|
29
31
|
linked_libraries = find_linked_libraries(target)
|
30
|
-
node =
|
31
|
-
if node.nil?
|
32
|
-
node = Node.new(target.display_name)
|
33
|
-
nodes[target.display_name] = node
|
34
|
-
end
|
32
|
+
node = node_for_target_display_name(target.display_name)
|
35
33
|
linked_libraries.each do |library_name|
|
36
|
-
library_node =
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
34
|
+
library_node = node_for_target_display_name(library_name)
|
35
|
+
add_neighbor(node, library_node)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def add_other_ld_flags_info(ld_flags_info)
|
41
|
+
ld_flags_info.each do |target, ld_flags_per_config|
|
42
|
+
node = node_for_target_display_name(target.display_name)
|
43
|
+
ld_flags_per_config.each_value do |ld_flags|
|
44
|
+
joined_flags = ld_flags.join(' ')
|
45
|
+
joined_flags.match(/-l"(.*?)"/).captures.each { |library| add_as_neighbor(node, library) }
|
46
|
+
joined_flags.match(/-framework "(.*?)"/).captures.each { |framework| add_as_neighbor(node, framework) }
|
46
47
|
end
|
47
48
|
end
|
48
49
|
end
|
@@ -51,6 +52,7 @@ module Pandan
|
|
51
52
|
resolved = []
|
52
53
|
target_node = nodes[target]
|
53
54
|
raise "Target #{target} not found" if target_node.nil?
|
55
|
+
|
54
56
|
resolve(target_node, resolved)
|
55
57
|
resolved.delete(target_node)
|
56
58
|
resolved
|
@@ -58,18 +60,42 @@ module Pandan
|
|
58
60
|
|
59
61
|
private
|
60
62
|
|
63
|
+
def add_as_neighbor(node, item)
|
64
|
+
add_neighbor(node, node_for_target_display_name(item))
|
65
|
+
end
|
66
|
+
|
67
|
+
def node_for_target_display_name(display_name)
|
68
|
+
node = nodes[display_name]
|
69
|
+
if node.nil?
|
70
|
+
node = Node.new(display_name)
|
71
|
+
nodes[display_name] = node
|
72
|
+
end
|
73
|
+
node
|
74
|
+
end
|
75
|
+
|
76
|
+
def add_neighbor(source, destination)
|
77
|
+
if reverse
|
78
|
+
destination.add_neighbor(source)
|
79
|
+
else
|
80
|
+
source.add_neighbor(destination)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
61
84
|
def find_linked_libraries(target)
|
62
85
|
frameworks_build_phase = target.build_phases.find { |build_phase| build_phase.isa.eql? 'PBXFrameworksBuildPhase' }
|
86
|
+
|
87
|
+
return [] unless frameworks_build_phase
|
88
|
+
|
63
89
|
frameworks_build_phase.files.map { |file| file.display_name.gsub '.framework', '' }
|
64
90
|
end
|
65
91
|
|
66
92
|
def resolve(node, resolved, resolving = [])
|
67
93
|
resolving << node
|
68
94
|
node.neighbors.each do |neighbor|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
95
|
+
next if resolved.include? neighbor
|
96
|
+
raise "Found dependency cycle: #{node.name} -> #{neighbor.name}" if resolving.include? neighbor
|
97
|
+
|
98
|
+
resolve(neighbor, resolved, resolving)
|
73
99
|
end
|
74
100
|
resolved << node
|
75
101
|
resolving.delete(node)
|
data/lib/pandan/parser.rb
CHANGED
@@ -1,19 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'xcodeproj'
|
2
4
|
|
3
5
|
module Pandan
|
4
6
|
class Parser
|
5
|
-
attr_reader :workspace, :regex
|
7
|
+
attr_reader :workspace, :workspace_dir, :regex
|
6
8
|
|
7
9
|
def initialize(workspace_path, filter)
|
10
|
+
@workspace_dir = File.dirname(workspace_path)
|
8
11
|
@workspace = Xcodeproj::Workspace.new_from_xcworkspace(workspace_path)
|
9
12
|
@regex = filter
|
10
13
|
@regex ||= '.*' # Match everything
|
11
14
|
end
|
12
15
|
|
13
16
|
def all_targets
|
14
|
-
|
15
|
-
projects = all_project_paths.map { |project_path| Xcodeproj::Project.open(project_path) }
|
17
|
+
@projects ||= projects
|
16
18
|
projects.flat_map(&:targets).select { |target| target.name =~ /#{regex}/ }
|
17
19
|
end
|
20
|
+
|
21
|
+
def other_linker_flags
|
22
|
+
@projects ||= projects
|
23
|
+
ld_flags_info = {}
|
24
|
+
projects.flat_map(&:targets).each do |target|
|
25
|
+
ld_flags_info[target] = target.resolved_build_setting('OTHER_LDFLAGS', true)
|
26
|
+
end
|
27
|
+
ld_flags_info
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def projects
|
33
|
+
all_project_paths = workspace.file_references.map(&:path)
|
34
|
+
all_project_paths.map do |project_path|
|
35
|
+
Xcodeproj::Project.open(File.expand_path(project_path, @workspace_dir))
|
36
|
+
end
|
37
|
+
end
|
18
38
|
end
|
19
39
|
end
|
data/lib/pandan/version.rb
CHANGED
data/lib/pandan/xcworkspace.rb
CHANGED
data/pandan.gemspec
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require 'pandan/version'
|
5
6
|
|
@@ -22,11 +23,13 @@ Gem::Specification.new do |spec|
|
|
22
23
|
spec.executables = 'pandan'
|
23
24
|
spec.require_paths = ['lib']
|
24
25
|
|
25
|
-
spec.
|
26
|
-
spec.
|
27
|
-
spec.
|
26
|
+
spec.add_runtime_dependency 'claide', '~> 1.0'
|
27
|
+
spec.add_runtime_dependency 'ruby-graphviz', '~> 1.2'
|
28
|
+
spec.add_runtime_dependency 'xcodeproj', '~> 1.7'
|
28
29
|
|
29
|
-
spec.
|
30
|
-
spec.
|
31
|
-
spec.
|
30
|
+
spec.add_development_dependency 'bundler'
|
31
|
+
spec.add_development_dependency 'rake'
|
32
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
33
|
+
spec.add_development_dependency 'rspec_junit_formatter'
|
34
|
+
spec.add_development_dependency 'rubocop', '0.63'
|
32
35
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pandan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Renzo Crisóstomo
|
@@ -10,92 +10,120 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2020-04-10 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: claide
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
19
|
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '1.
|
22
|
-
type: :
|
21
|
+
version: '1.0'
|
22
|
+
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: '1.
|
28
|
+
version: '1.0'
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
|
-
name:
|
30
|
+
name: ruby-graphviz
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
33
|
- - "~>"
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version: '
|
36
|
-
type: :
|
35
|
+
version: '1.2'
|
36
|
+
type: :runtime
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
40
|
- - "~>"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: '
|
42
|
+
version: '1.2'
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
|
-
name:
|
44
|
+
name: xcodeproj
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: '
|
50
|
-
type: :
|
49
|
+
version: '1.7'
|
50
|
+
type: :runtime
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
54
|
- - "~>"
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
56
|
+
version: '1.7'
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
|
-
name:
|
58
|
+
name: bundler
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- - "
|
61
|
+
- - ">="
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version:
|
64
|
-
type: :
|
63
|
+
version: '0'
|
64
|
+
type: :development
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
|
-
- - "
|
68
|
+
- - ">="
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version:
|
70
|
+
version: '0'
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
72
|
+
name: rake
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
|
-
- - "
|
75
|
+
- - ">="
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
78
|
-
type: :
|
77
|
+
version: '0'
|
78
|
+
type: :development
|
79
79
|
prerelease: false
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
|
-
- - "
|
82
|
+
- - ">="
|
83
83
|
- !ruby/object:Gem::Version
|
84
|
-
version:
|
84
|
+
version: '0'
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
|
-
name:
|
86
|
+
name: rspec
|
87
87
|
requirement: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
89
|
- - "~>"
|
90
90
|
- !ruby/object:Gem::Version
|
91
|
-
version: '
|
92
|
-
type: :
|
91
|
+
version: '3.0'
|
92
|
+
type: :development
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
96
|
- - "~>"
|
97
97
|
- !ruby/object:Gem::Version
|
98
|
-
version: '
|
98
|
+
version: '3.0'
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: rspec_junit_formatter
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
type: :development
|
107
|
+
prerelease: false
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: rubocop
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - '='
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0.63'
|
120
|
+
type: :development
|
121
|
+
prerelease: false
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - '='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0.63'
|
99
127
|
description: CLI tool that outputs dependency information from a set of Xcode projects
|
100
128
|
with targets thatdepend on each other, it does it by creating a (reverse) dependency
|
101
129
|
graph and doing abreadth-first search.
|
@@ -111,7 +139,8 @@ files:
|
|
111
139
|
- ".gitignore"
|
112
140
|
- ".rspec"
|
113
141
|
- ".rubocop.yml"
|
114
|
-
- ".
|
142
|
+
- ".ruby-version"
|
143
|
+
- ".travis.yml"
|
115
144
|
- CODE_OF_CONDUCT.md
|
116
145
|
- CONTRIBUTING.md
|
117
146
|
- Gemfile
|
@@ -152,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
181
|
version: '0'
|
153
182
|
requirements: []
|
154
183
|
rubyforge_project:
|
155
|
-
rubygems_version: 2.6
|
184
|
+
rubygems_version: 2.7.6
|
156
185
|
signing_key:
|
157
186
|
specification_version: 4
|
158
187
|
summary: Retrieve Xcode dependency information with ease.
|
data/.rubocop_todo.yml
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
# This configuration was generated by
|
2
|
-
# `rubocop --auto-gen-config`
|
3
|
-
# on 2017-03-23 19:05:08 +0100 using RuboCop version 0.47.1.
|
4
|
-
# The point is for the user to remove these configuration records
|
5
|
-
# one by one as the offenses are removed from the code base.
|
6
|
-
# Note that changes in the inspected code, or installation of new
|
7
|
-
# versions of RuboCop, may require this file to be generated again.
|
8
|
-
|
9
|
-
# Offense count: 1
|
10
|
-
Metrics/AbcSize:
|
11
|
-
Max: 21
|
12
|
-
|
13
|
-
# Offense count: 10
|
14
|
-
Style/Documentation:
|
15
|
-
Exclude:
|
16
|
-
- 'spec/**/*'
|
17
|
-
- 'test/**/*'
|
18
|
-
- 'lib/pandan.rb'
|
19
|
-
- 'lib/pandan/command.rb'
|
20
|
-
- 'lib/pandan/command/dependency_graph.rb'
|
21
|
-
- 'lib/pandan/command/query.rb'
|
22
|
-
- 'lib/pandan/command/targets.rb'
|
23
|
-
- 'lib/pandan/graph.rb'
|
24
|
-
- 'lib/pandan/parser.rb'
|
25
|
-
- 'lib/pandan/xcodeproj/user_interface.rb'
|
26
|
-
- 'lib/pandan/xcworkspace.rb'
|