Skip to content

Commit 06bc76f

Browse files
ahmafistrager
authored andcommitted
fix span E111
Now if there is a missing body for a class, the error points to the end of the class defintion where body should start
1 parent 89af5d5 commit 06bc76f

File tree

2 files changed

+18
-16
lines changed

2 files changed

+18
-16
lines changed

src/quick-lint-js/parse.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1415,7 +1415,6 @@ class parser {
14151415
template <QLJS_PARSE_VISITOR Visitor>
14161416
void parse_and_visit_class(Visitor &v, name_requirement require_name) {
14171417
QLJS_ASSERT(this->peek().type == token_type::kw_class);
1418-
const char8 *class_keyword_begin = this->peek().begin;
14191418

14201419
this->parse_and_visit_class_heading(v, /*require_name=*/require_name);
14211420

@@ -1431,13 +1430,14 @@ class parser {
14311430
this->skip();
14321431
break;
14331432

1434-
default:
1433+
default: {
1434+
const char8 *here = this->lexer_.end_of_previous_token();
14351435
this->error_reporter_->report(error_missing_body_for_class{
1436-
.class_keyword_and_name_and_heritage = source_code_span(
1437-
class_keyword_begin, this->lexer_.end_of_previous_token()),
1436+
.class_keyword_and_name_and_heritage = source_code_span(here, here),
14381437
});
14391438
break;
14401439
}
1440+
}
14411441
}
14421442

14431443
// Parse the 'class' keyword, the class's optional name, and any extends

test/test-parse-class.cpp

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,11 @@ TEST(test_parse, class_statement_requires_a_body) {
106106
parser p(&code, &v);
107107
EXPECT_TRUE(p.parse_and_visit_statement(v));
108108
EXPECT_THAT(v.visits, ElementsAre("visit_variable_declaration")); // C
109-
EXPECT_THAT(v.errors, ElementsAre(ERROR_TYPE_FIELD(
110-
error_missing_body_for_class,
111-
class_keyword_and_name_and_heritage,
112-
offsets_matcher(&code, 0, u8"class C"))));
109+
EXPECT_THAT(
110+
v.errors,
111+
ElementsAre(ERROR_TYPE_FIELD(
112+
error_missing_body_for_class, class_keyword_and_name_and_heritage,
113+
offsets_matcher(&code, strlen(u8"class C"), u8""))));
113114
}
114115

115116
{
@@ -118,14 +119,15 @@ TEST(test_parse, class_statement_requires_a_body) {
118119
parser p(&code, &v);
119120
EXPECT_TRUE(p.parse_and_visit_statement(v));
120121
EXPECT_THAT(v.visits, IsEmpty());
121-
EXPECT_THAT(v.errors,
122-
UnorderedElementsAre(
123-
ERROR_TYPE_FIELD(error_missing_name_in_class_statement,
124-
class_keyword,
125-
offsets_matcher(&code, 0, u8"class")),
126-
ERROR_TYPE_FIELD(error_missing_body_for_class,
127-
class_keyword_and_name_and_heritage,
128-
offsets_matcher(&code, 0, u8"class"))));
122+
EXPECT_THAT(
123+
v.errors,
124+
UnorderedElementsAre(
125+
ERROR_TYPE_FIELD(error_missing_name_in_class_statement,
126+
class_keyword,
127+
offsets_matcher(&code, 0, u8"class")),
128+
ERROR_TYPE_FIELD(error_missing_body_for_class,
129+
class_keyword_and_name_and_heritage,
130+
offsets_matcher(&code, strlen(u8"class"), u8""))));
129131
}
130132
}
131133

0 commit comments

Comments
 (0)