Skip to content

Commit 8909063

Browse files
authored
Merge pull request #5098 from rmosolgo/rubocop-field-type-fix
Handle single-line classes in field_type_in_block cop
2 parents a85669b + f4fe469 commit 8909063

File tree

9 files changed

+28
-11
lines changed

9 files changed

+28
-11
lines changed

.rubocop.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require:
88
AllCops:
99
DisabledByDefault: true
1010
SuggestExtensions: false
11-
TargetRubyVersion: 2.4
11+
TargetRubyVersion: 2.7
1212
Exclude:
1313
- 'lib/graphql/language/lexer.rb'
1414
- 'lib/graphql/language/parser.rb'

graphql.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ Gem::Specification.new do |s|
3838
s.add_development_dependency "minitest-reporters"
3939
s.add_development_dependency "rake"
4040
s.add_development_dependency 'rake-compiler'
41-
s.add_development_dependency "rubocop", "1.12" # for Ruby 2.4 enforcement
41+
s.add_development_dependency "rubocop"
4242
# website stuff
4343
s.add_development_dependency "jekyll"
4444
s.add_development_dependency "yard"

lib/graphql/rubocop/graphql/field_type_in_block.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,15 @@ def delete_type_argument(send_node, type_const)
110110
end
111111

112112
def determine_field_indent(send_node)
113-
surrounding_node = send_node.parent.parent
113+
surrounding_node = send_node.parent
114+
if !surrounding_node.is_a?(RuboCop::AST::ClassNode)
115+
surrounding_node = surrounding_node.parent
116+
end
117+
118+
if !surrounding_node.is_a?(RuboCop::AST::ClassNode)
119+
raise "Invariant: Something went wrong in GraphQL-Ruby, couldn't find surrounding class definition for field (#{send_node}).\n\nPlease report this error on GitHub."
120+
end
121+
114122
surrounding_source = surrounding_node.source
115123
indent_test_idx = send_node.location.expression.begin_pos - surrounding_node.source_range.begin_pos - 1
116124
field_indent = "".dup

spec/fixtures/cop/.rubocop.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ GraphQL/FieldTypeInBlock:
1515
Enabled: true
1616
Include:
1717
- field_type.rb
18+
- small_field_type.rb
1819
- field_type_autocorrect.rb
1920

2021
GraphQL/RootTypesInBlock:
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class Types::Admin::FooType < Types::FooType
2+
field :bar, Types::BarType
3+
end

spec/graphql/cop/field_type_in_block_spec.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,9 @@
2525

2626
assert_rubocop_autocorrects_all("spec/fixtures/cop/field_type.rb")
2727
end
28+
29+
it "works on small classes" do
30+
result = run_rubocop_on("spec/fixtures/cop/small_field_type.rb")
31+
assert_equal 1, rubocop_errors(result)
32+
end
2833
end

spec/graphql/schema/printer_spec.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ class Subscription < GraphQL::Schema::Object
124124
describe ".print_introspection_schema" do
125125
it "returns the schema as a string for the introspection types" do
126126
# From https://github.com/graphql/graphql-js/blob/6a0e00fe46951767287f2cc62e1a10b167b2eaa6/src/utilities/__tests__/schemaPrinter-test.js#L599
127-
expected = <<SCHEMA
127+
expected = <<-GRAPHQL
128128
schema {
129129
query: Root
130130
}
@@ -440,7 +440,7 @@ class Subscription < GraphQL::Schema::Object
440440
"""
441441
UNION
442442
}
443-
SCHEMA
443+
GRAPHQL
444444
assert_equal expected.chomp, GraphQL::Schema::Printer.print_introspection_schema
445445
end
446446
end
@@ -479,19 +479,19 @@ class Subscription < GraphQL::Schema::Object
479479
custom_subscription = Class.new(PrinterTestSchema::Subscription) { graphql_name "MySubscriptionRoot" }
480480
custom_schema = Class.new(PrinterTestSchema) { subscription(custom_subscription) }
481481

482-
expected = <<SCHEMA
482+
expected = <<GRAPHQL
483483
schema {
484484
query: Query
485485
mutation: Mutation
486486
subscription: MySubscriptionRoot
487487
}
488-
SCHEMA
488+
GRAPHQL
489489

490490
assert_match expected, GraphQL::Schema::Printer.print_schema(custom_schema)
491491
end
492492

493493
it "returns the schema as a string for the defined types" do
494-
expected = <<SCHEMA
494+
expected = <<GRAPHQL
495495
type Audio {
496496
duration: Int!
497497
id: ID!
@@ -630,7 +630,7 @@ class Subscription < GraphQL::Schema::Object
630630
someEnum: Choice = FOO
631631
sub: [Sub]
632632
}
633-
SCHEMA
633+
GRAPHQL
634634

635635
assert_equal expected, GraphQL::Schema::Printer.print_schema(schema)
636636
end

spec/graphql/subscriptions_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1037,7 +1037,7 @@ class MyEnumType < GraphQL::Schema::Enum
10371037
end
10381038

10391039
class MySubscription < GraphQL::Schema::Subscription
1040-
argument :my_enum, MyEnumType, required: true
1040+
argument :my_enum, MyEnumType
10411041
field :my_enum, MyEnumType
10421042
end
10431043

spec/support/rubocop_test_helpers.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ def run_rubocop_on(fixture_path, autocorrect: false)
66
end
77

88
def rubocop_errors(rubocop_result)
9-
rubocop_result =~ /(\d) offenses detected/
9+
rubocop_result =~ /(\d) offenses? detected/
1010
$1.to_i
1111
end
1212

0 commit comments

Comments
 (0)