api_diff 0.3.1 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/api_diff/api.rb +6 -1
- data/lib/api_diff/struct.rb +4 -0
- data/lib/api_diff/swift_interface_parser.rb +19 -4
- data/lib/api_diff/version.rb +1 -1
- data/lib/api_diff.rb +1 -0
- data/test/swift_interface_parser_test.rb +20 -0
- metadata +9 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da95c670b708585e0f5a7dc1c1ffff7a003bf9e283dfe0189a7456e279fd8aeb
|
4
|
+
data.tar.gz: 84a0502b97dc4aa46e54d7f7d112900beaae001af293aa5c0b427937b17bf552
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f5b05ba569e101be84e9f144324c50ae0f7dce7e44c6c3052f355bb5b0f60067f9eee7f5f2a2af26b8066006c4b509fe1d92fe65610a90ed71108bd132cc649
|
7
|
+
data.tar.gz: d2ff8b714d6b441d1b11375e0fed18b893d2768f9a54cb106ef1f3382e1154a241e17dd805ea3257c144c7440579617a8e148a720db921aec3c7eba35f0ff39f
|
data/lib/api_diff/api.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
module ApiDiff
|
2
2
|
class Api
|
3
|
-
attr_accessor :classes, :interfaces, :enums
|
3
|
+
attr_accessor :classes, :structs, :interfaces, :enums
|
4
4
|
|
5
5
|
def initialize
|
6
6
|
@classes = []
|
7
|
+
@structs = []
|
7
8
|
@interfaces = []
|
8
9
|
@enums = []
|
9
10
|
end
|
@@ -12,6 +13,10 @@ module ApiDiff
|
|
12
13
|
classes.find { |c| c.name == named || c.fully_qualified_name == fully_qualified_name }
|
13
14
|
end
|
14
15
|
|
16
|
+
def struct(named: nil, fully_qualified_name: nil)
|
17
|
+
structs.find { |s| s.name == named || s.fully_qualified_name == fully_qualified_name }
|
18
|
+
end
|
19
|
+
|
15
20
|
def interface(named: nil, fully_qualified_name: nil)
|
16
21
|
interfaces.find { |i| i.name == named || i.fully_qualified_name == fully_qualified_name }
|
17
22
|
end
|
@@ -17,9 +17,11 @@ module ApiDiff
|
|
17
17
|
first_line = section.split("\n")[0]
|
18
18
|
if first_line.include? "public class"
|
19
19
|
parse_class(section, container_types)
|
20
|
+
elsif first_line.include? "public struct"
|
21
|
+
parse_struct(section, container_types)
|
20
22
|
elsif first_line.include? "public protocol"
|
21
23
|
parse_ptotocol(section, container_types)
|
22
|
-
elsif first_line.
|
24
|
+
elsif first_line.start_with? "extension"
|
23
25
|
parse_extension(section, container_types)
|
24
26
|
elsif first_line.include? "public enum"
|
25
27
|
parse_enum(section, container_types)
|
@@ -46,6 +48,18 @@ module ApiDiff
|
|
46
48
|
parse_nested_types(class_content, [*container_types, name])
|
47
49
|
end
|
48
50
|
|
51
|
+
def parse_struct(struct_content, container_types)
|
52
|
+
name = struct_content.match(/public struct (\w+)/)[1]
|
53
|
+
|
54
|
+
struct = Struct.new(name, qualified_name(name, container_types))
|
55
|
+
struct.parents = parse_parents(struct_content)
|
56
|
+
struct.properties = parse_properties(struct_content)
|
57
|
+
struct.functions = parse_functions(struct_content)
|
58
|
+
api.structs << struct
|
59
|
+
|
60
|
+
parse_nested_types(struct_content, [*container_types, name])
|
61
|
+
end
|
62
|
+
|
49
63
|
def parse_ptotocol(protocol_content, container_types)
|
50
64
|
name = protocol_content.match(/public protocol (\w+)/)[1]
|
51
65
|
|
@@ -61,9 +75,10 @@ module ApiDiff
|
|
61
75
|
def parse_extension(content, container_types)
|
62
76
|
name = content.match(/extension ([\w\.]+)/)[1]
|
63
77
|
|
64
|
-
base_type = api.class(fully_qualified_name:
|
65
|
-
base_type ||= api.
|
66
|
-
base_type ||= api.
|
78
|
+
base_type = api.class(fully_qualified_name: name)
|
79
|
+
base_type ||= api.struct(fully_qualified_name: name)
|
80
|
+
base_type ||= api.interface(fully_qualified_name: name)
|
81
|
+
base_type ||= api.enum(fully_qualified_name: name)
|
67
82
|
raise Error.new "Unable to find base type for extension `#{name}`" if base_type.nil?
|
68
83
|
base_type.parents.append(*parse_parents(content)).uniq!
|
69
84
|
base_type.properties.append(*parse_properties(content)).uniq!
|
data/lib/api_diff/version.rb
CHANGED
data/lib/api_diff.rb
CHANGED
@@ -43,6 +43,26 @@ class SwiftInterfaceParserTest < Minitest::Test
|
|
43
43
|
assert_equal "class Fourth : Codable, Hashable", fourth.declaration
|
44
44
|
end
|
45
45
|
|
46
|
+
def test_struct
|
47
|
+
input = <<~EOF
|
48
|
+
public struct First {
|
49
|
+
}
|
50
|
+
public struct Second : Package.Parent {
|
51
|
+
}
|
52
|
+
EOF
|
53
|
+
|
54
|
+
api = parse(input)
|
55
|
+
structs = api.structs
|
56
|
+
|
57
|
+
first = structs[0]
|
58
|
+
assert_equal "First", first.name
|
59
|
+
assert_equal "struct First", first.declaration
|
60
|
+
|
61
|
+
second = structs[1]
|
62
|
+
assert_equal "Second", second.name
|
63
|
+
assert_equal "struct Second : Parent", second.declaration
|
64
|
+
end
|
65
|
+
|
46
66
|
def test_properties
|
47
67
|
input = <<~EOF
|
48
68
|
public class FirstClass {
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: api_diff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian Ludwig
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -38,7 +38,7 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '11'
|
41
|
-
description:
|
41
|
+
description:
|
42
42
|
email:
|
43
43
|
- sebastian@lurado.de
|
44
44
|
executables:
|
@@ -60,6 +60,7 @@ files:
|
|
60
60
|
- lib/api_diff/kotlin_bcv_parser.rb
|
61
61
|
- lib/api_diff/parser.rb
|
62
62
|
- lib/api_diff/property.rb
|
63
|
+
- lib/api_diff/struct.rb
|
63
64
|
- lib/api_diff/swift_interface_parser.rb
|
64
65
|
- lib/api_diff/type.rb
|
65
66
|
- lib/api_diff/version.rb
|
@@ -72,7 +73,7 @@ licenses:
|
|
72
73
|
metadata:
|
73
74
|
homepage_uri: https://github.com/sebastianludwig/api-diff
|
74
75
|
source_code_uri: https://github.com/sebastianludwig/api_diff
|
75
|
-
post_install_message:
|
76
|
+
post_install_message:
|
76
77
|
rdoc_options: []
|
77
78
|
require_paths:
|
78
79
|
- lib
|
@@ -87,11 +88,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
87
88
|
- !ruby/object:Gem::Version
|
88
89
|
version: '0'
|
89
90
|
requirements: []
|
90
|
-
rubygems_version: 3.
|
91
|
-
signing_key:
|
91
|
+
rubygems_version: 3.3.11
|
92
|
+
signing_key:
|
92
93
|
specification_version: 4
|
93
94
|
summary: Bring APIs into an easily diff-able format
|
94
95
|
test_files:
|
96
|
+
- test/kotlin_bcv_parser_test.rb
|
95
97
|
- test/swift_interface_parser_test.rb
|
96
98
|
- test/test_helper.rb
|
97
|
-
- test/kotlin_bcv_parser_test.rb
|