Skip to content

Commit ccd4744

Browse files
authored
Merge pull request #4 from sue445/feature/import-from-go-gem-wrapper
Import from go-gem-wrapper
2 parents c335053 + a111cfa commit ccd4744

22 files changed

+1484
-16
lines changed

.github/workflows/test.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ jobs:
3838
- run: sudo apt-get update
3939
- run: sudo apt-get install -y universal-ctags
4040

41-
- run: bundle exec rspec
41+
- run: bundle exec rake spec
42+
- run: bundle exec rake rubocop
4243

4344
- name: Slack Notification (not success)
4445
uses: act10ns/slack@v2

.rspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
--format documentation
1+
--format progress
22
--color
33
--require spec_helper

.rubocop.yml

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
AllCops:
2+
TargetRubyVersion: 3.3
3+
NewCops: enable
4+
SuggestExtensions: false
5+
6+
Gemspec/DevelopmentDependencies:
7+
EnforcedStyle: gemspec
8+
9+
Layout/DotPosition:
10+
EnforcedStyle: trailing
11+
12+
Layout/HashAlignment:
13+
EnforcedColonStyle: table
14+
EnforcedHashRocketStyle: table
15+
16+
Layout/SpaceAroundOperators:
17+
Exclude:
18+
# Suppress line breaks in spec files (e.g `it { should xxxx }`, `its(:method) { should xxxx }` )
19+
- "**/*_spec.rb"
20+
21+
Lint/BinaryOperatorWithIdenticalOperands:
22+
Exclude:
23+
- "**/*_spec.rb" # for rspec-parameterized
24+
25+
Metrics/AbcSize:
26+
Max: 20
27+
28+
Metrics/BlockLength:
29+
Exclude:
30+
- "*.gemspec"
31+
- "**/*_spec.rb"
32+
33+
Metrics/CyclomaticComplexity:
34+
Max: 13
35+
36+
Metrics/MethodLength:
37+
Max: 28
38+
39+
Metrics/PerceivedComplexity:
40+
Max: 11
41+
42+
Style/FetchEnvVar:
43+
Enabled: false
44+
45+
Style/NumericPredicate:
46+
EnforcedStyle: comparison
47+
48+
Style/SingleLineMethods:
49+
Enabled: false
50+
51+
Style/StringLiterals:
52+
EnforcedStyle: double_quotes
53+
54+
Style/StringLiteralsInInterpolation:
55+
EnforcedStyle: double_quotes
56+
57+
Style/TrailingCommaInArguments:
58+
EnforcedStyleForMultiline: comma
59+
60+
Style/TrailingCommaInArrayLiteral:
61+
EnforcedStyleForMultiline: comma
62+
63+
Style/TrailingCommaInHashLiteral:
64+
EnforcedStyleForMultiline: comma

Gemfile

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,3 @@ source "https://rubygems.org"
44

55
# Specify your gem's dependencies in ruby_header_parser.gemspec
66
gemspec
7-
8-
gem "rake", "~> 13.0"
9-
10-
gem "rspec", "~> 3.0"

Rakefile

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,11 @@ require "rspec/core/rake_task"
55

66
RSpec::Core::RakeTask.new(:spec)
77

8-
task default: :spec
8+
require "rubocop/rake_task"
9+
10+
RuboCop::RakeTask.new
11+
12+
desc "Run all development tasks"
13+
task dev_all: %i[spec rubocop]
14+
15+
task default: :dev_all

lib/ruby_header_parser.rb

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,20 @@
11
# frozen_string_literal: true
22

3+
require "yaml"
4+
35
require_relative "ruby_header_parser/version"
46

7+
# Parser for ruby.h
58
module RubyHeaderParser
69
class Error < StandardError; end
7-
# Your code goes here...
10+
11+
autoload :ArgumentDefinition, "ruby_header_parser/argument_definition"
12+
autoload :Data, "ruby_header_parser/data"
13+
autoload :EnumDefinition, "ruby_header_parser/enum_definition"
14+
autoload :FunctionDefinition, "ruby_header_parser/function_definition"
15+
autoload :Parser, "ruby_header_parser/parser"
16+
autoload :StructDefinition, "ruby_header_parser/struct_definition"
17+
autoload :TypeDefinition, "ruby_header_parser/type_definition"
18+
autoload :TyperefDefinition, "ruby_header_parser/typeref_definition"
19+
autoload :Util, "ruby_header_parser/util"
820
end
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# frozen_string_literal: true
2+
3+
module RubyHeaderParser
4+
# argument definition for {RubyHeaderParser::FunctionDefinition}
5+
class ArgumentDefinition
6+
# @!attribute type
7+
# @return [String]
8+
attr_accessor :type
9+
10+
# @!attribute name
11+
# @return [String]
12+
attr_accessor :name
13+
14+
# @!attribute pointer
15+
# @return [Symbol,nil] :ref, :array
16+
attr_accessor :pointer
17+
18+
# @!attribute length
19+
# @return [Integer]
20+
attr_accessor :length
21+
22+
# @param type [String]
23+
# @param name [String]
24+
# @param pointer [Symbol,nil] :ref, :array
25+
# @param length [String]
26+
def initialize(type:, name:, pointer: nil, length: 0)
27+
@type = type
28+
@name = name
29+
@pointer = pointer
30+
@length = length
31+
end
32+
33+
# @param other [ArgumentDefinition]
34+
# @return [Boolean]
35+
def ==(other)
36+
other.is_a?(ArgumentDefinition) && type == other.type && name == other.name && pointer == other.pointer &&
37+
length == other.length
38+
end
39+
40+
# @return [Boolean]
41+
def pointer?
42+
!!pointer
43+
end
44+
end
45+
end

lib/ruby_header_parser/data.rb

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# frozen_string_literal: true
2+
3+
module RubyHeaderParser
4+
# Manager for `data.yml`
5+
class Data
6+
# @!attribute [r] data
7+
# @return [Hash]
8+
attr_reader :data
9+
10+
def initialize
11+
yaml = File.read(File.join(__dir__, "data.yml"))
12+
@data = YAML.safe_load(yaml, aliases: true, permitted_classes: [Regexp])
13+
end
14+
15+
# @param function_name [String]
16+
# @param pos [Integer] arg position (1 origin)
17+
# @return [Symbol] :ref, :array, :ref_array, :function, :sref, :str_array, :in_ref
18+
def function_arg_pointer_hint(function_name:, pos:)
19+
pointer_hint = data["function"]["pointer_hint"].dig(function_name, pos)
20+
return pointer_hint.to_sym if pointer_hint
21+
22+
:ref
23+
end
24+
25+
# @param function_name [String]
26+
# @return [Symbol] :ref, :raw
27+
def function_self_pointer_hint(function_name)
28+
pointer_hint = data["function"]["pointer_hint"].dig(function_name, "self")
29+
return pointer_hint.to_sym if pointer_hint
30+
31+
:ref
32+
end
33+
34+
# rubocop:disable Style/CaseEquality
35+
36+
# Whether generate C function to go
37+
# @param function_name [String]
38+
# @return [Boolean]
39+
def should_generate_function?(function_name)
40+
return false if data["function"]["exclude_name"].any? { |format| format === function_name }
41+
42+
data["function"]["include_name"].any? { |format| format === function_name }
43+
end
44+
45+
# Whether generate C struct to go
46+
# @param struct_name [String]
47+
# @return [Boolean]
48+
def should_generate_struct?(struct_name)
49+
return false if data["struct"]["exclude_name"].any? { |format| format === struct_name }
50+
51+
data["struct"]["include_name"].any? { |format| format === struct_name }
52+
end
53+
54+
# Whether generate C type to go
55+
# @param type_name [String]
56+
# @return [Boolean]
57+
def should_generate_type?(type_name)
58+
return false if data["type"]["exclude_name"].any? { |format| format === type_name }
59+
60+
data["type"]["include_name"].any? { |format| format === type_name }
61+
end
62+
63+
# Whether generate C enum to go
64+
# @param enum_name [String]
65+
# @return [Boolean]
66+
def should_generate_enum?(enum_name)
67+
return false if data["enum"]["exclude_name"].any? { |format| format === enum_name }
68+
69+
data["enum"]["include_name"].any? { |format| format === enum_name }
70+
end
71+
72+
# rubocop:enable Style/CaseEquality
73+
end
74+
end

0 commit comments

Comments
 (0)