Skip to content

Commit 1218a41

Browse files
committed
refactor(lsp): move Linter_Options construction down call stack
Create Linter_Options as late as possible.
1 parent 1fa15fe commit 1218a41

File tree

3 files changed

+41
-39
lines changed

3 files changed

+41
-39
lines changed

src/quick-lint-js/lsp/lsp-server.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -754,12 +754,12 @@ LSP_Linter::~LSP_Linter() = default;
754754
void LSP_Linter::lint(LSP_Documents::Lintable_Document& doc,
755755
String8_View uri_json,
756756
Outgoing_JSON_RPC_Message_Queue& outgoing_messages) {
757-
this->lint(*doc.config, Linter_Options{.language = doc.language},
758-
doc.doc.string(), uri_json, doc.version_json, outgoing_messages);
757+
this->lint(*doc.config, doc.language, doc.doc.string(), uri_json,
758+
doc.version_json, outgoing_messages);
759759
}
760760

761761
void LSP_JavaScript_Linter::lint(
762-
Configuration& config, Linter_Options lint_options, Padded_String_View code,
762+
Configuration& config, File_Language language, Padded_String_View code,
763763
String8_View uri_json, String8_View version_json,
764764
Outgoing_JSON_RPC_Message_Queue& outgoing_messages) {
765765
Byte_Buffer& notification_json = outgoing_messages.new_message();
@@ -776,16 +776,17 @@ void LSP_JavaScript_Linter::lint(
776776
notification_json.append_copy(version_json);
777777

778778
notification_json.append_copy(u8R"--(,"diagnostics":)--"_sv);
779-
this->lint_and_get_diagnostics(config, lint_options, code, notification_json);
779+
this->lint_and_get_diagnostics(config, language, code, notification_json);
780780

781781
notification_json.append_copy(u8R"--(},"jsonrpc":"2.0"})--"_sv);
782782
}
783783

784784
void LSP_JavaScript_Linter::lint_and_get_diagnostics(
785-
Configuration& config, Linter_Options lint_options, Padded_String_View code,
785+
Configuration& config, File_Language language, Padded_String_View code,
786786
Byte_Buffer& diagnostics_json) {
787787
LSP_Diag_Reporter diag_reporter(qljs_messages, diagnostics_json, code);
788-
parse_and_lint(code, diag_reporter, config.globals(), lint_options);
788+
parse_and_lint(code, diag_reporter, config.globals(),
789+
Linter_Options{.language = language});
789790
diag_reporter.finish();
790791
}
791792

src/quick-lint-js/lsp/lsp-server.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <quick-lint-js/configuration/configuration-loader.h>
1414
#include <quick-lint-js/container/hash-map.h>
1515
#include <quick-lint-js/container/padded-string.h>
16+
#include <quick-lint-js/fe/language.h>
1617
#include <quick-lint-js/fe/linter.h>
1718
#include <quick-lint-js/io/file-canonical.h>
1819
#include <quick-lint-js/json.h>
@@ -265,7 +266,7 @@ class LSP_Linter {
265266

266267
virtual ~LSP_Linter();
267268

268-
virtual void lint(Configuration& config, Linter_Options lint_options,
269+
virtual void lint(Configuration& config, File_Language language,
269270
Padded_String_View code, String8_View uri_json,
270271
String8_View version_json,
271272
Outgoing_JSON_RPC_Message_Queue&) = 0;
@@ -278,12 +279,12 @@ class LSP_JavaScript_Linter final : public LSP_Linter {
278279
public:
279280
~LSP_JavaScript_Linter() override = default;
280281

281-
void lint(Configuration&, Linter_Options, Padded_String_View code,
282+
void lint(Configuration&, File_Language, Padded_String_View code,
282283
String8_View uri_json, String8_View version_json,
283284
Outgoing_JSON_RPC_Message_Queue&) override;
284285

285286
private:
286-
void lint_and_get_diagnostics(Configuration&, Linter_Options,
287+
void lint_and_get_diagnostics(Configuration&, File_Language,
287288
Padded_String_View code,
288289
Byte_Buffer& diagnostics_json);
289290
};

test/test-lsp-server.cpp

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@ POSIX_File_IO_Error generic_file_io_error = {EIO};
5454
class Mock_LSP_Linter final : public LSP_Linter {
5555
public:
5656
using Lint_And_Get_Diagnostics_Notification_Type =
57-
void(Configuration&, Linter_Options, Padded_String_View code,
57+
void(Configuration&, File_Language, Padded_String_View code,
5858
String8_View uri_json, String8_View version_json,
5959
Outgoing_JSON_RPC_Message_Queue& outgoing_messages);
6060

6161
explicit Mock_LSP_Linter()
62-
: lint_callback([](Configuration&, Linter_Options, Padded_String_View,
62+
: lint_callback([](Configuration&, File_Language, Padded_String_View,
6363
String8_View, String8_View,
6464
Outgoing_JSON_RPC_Message_Queue&) -> void {
6565
// Do nothing.
@@ -70,12 +70,12 @@ class Mock_LSP_Linter final : public LSP_Linter {
7070

7171
~Mock_LSP_Linter() override = default;
7272

73-
void lint(Configuration& config, Linter_Options lint_options,
73+
void lint(Configuration& config, File_Language language,
7474
Padded_String_View code, String8_View uri_json,
7575
String8_View version_json,
7676
Outgoing_JSON_RPC_Message_Queue& outgoing_messages) override {
7777
this->lint_calls.emplace_back(code.string_view());
78-
this->lint_callback(config, lint_options, code, uri_json, version_json,
78+
this->lint_callback(config, language, code, uri_json, version_json,
7979
outgoing_messages);
8080
}
8181

@@ -528,7 +528,7 @@ TEST_F(Test_Linting_LSP_Server, dollar_notifications_are_ignored) {
528528
}
529529

530530
TEST_F(Test_Linting_LSP_Server, opening_document_lints) {
531-
auto lint_callback = [&](Configuration&, Linter_Options,
531+
auto lint_callback = [&](Configuration&, File_Language,
532532
Padded_String_View code, String8_View uri_json,
533533
String8_View version,
534534
Outgoing_JSON_RPC_Message_Queue& outgoing_messages) {
@@ -604,10 +604,10 @@ TEST_F(Test_Linting_LSP_Server, javascript_language_ids_enable_jsx) {
604604
SCOPED_TRACE(out_string8(language_id));
605605
this->reset();
606606

607-
auto lint_callback = [&](Configuration&, Linter_Options lint_options,
607+
auto lint_callback = [&](Configuration&, File_Language language,
608608
Padded_String_View, String8_View, String8_View,
609609
Outgoing_JSON_RPC_Message_Queue&) {
610-
EXPECT_EQ(lint_options.language, File_Language::javascript_jsx);
610+
EXPECT_EQ(language, File_Language::javascript_jsx);
611611
};
612612
this->linter.lint_callback = lint_callback;
613613

@@ -636,10 +636,10 @@ TEST_F(Test_Linting_LSP_Server, typescript_language_ids_enable_typescript) {
636636
SCOPED_TRACE(out_string8(language_id));
637637
this->reset();
638638

639-
auto lint_callback = [&](Configuration&, Linter_Options lint_options,
639+
auto lint_callback = [&](Configuration&, File_Language language,
640640
Padded_String_View, String8_View, String8_View,
641641
Outgoing_JSON_RPC_Message_Queue&) {
642-
EXPECT_EQ(lint_options.language, File_Language::typescript);
642+
EXPECT_EQ(language, File_Language::typescript);
643643
};
644644
this->linter.lint_callback = lint_callback;
645645

@@ -668,10 +668,10 @@ TEST_F(Test_Linting_LSP_Server, tsx_language_ids_enable_typescript_jsx) {
668668
SCOPED_TRACE(out_string8(language_id));
669669
this->reset();
670670

671-
auto lint_callback = [&](Configuration&, Linter_Options lint_options,
671+
auto lint_callback = [&](Configuration&, File_Language language,
672672
Padded_String_View, String8_View, String8_View,
673673
Outgoing_JSON_RPC_Message_Queue&) {
674-
EXPECT_EQ(lint_options.language, File_Language::typescript_jsx);
674+
EXPECT_EQ(language, File_Language::typescript_jsx);
675675
};
676676
this->linter.lint_callback = lint_callback;
677677

@@ -846,7 +846,7 @@ TEST_F(Test_Linting_LSP_Server, linting_uses_config_from_file) {
846846
this->fs.create_file(this->fs.rooted("quick-lint-js.config"),
847847
u8R"({"globals": {"testGlobalVariable": true}})"_sv);
848848

849-
auto lint_callback = [&](Configuration& config, Linter_Options,
849+
auto lint_callback = [&](Configuration& config, File_Language,
850850
Padded_String_View, String8_View, String8_View,
851851
Outgoing_JSON_RPC_Message_Queue&) {
852852
EXPECT_TRUE(
@@ -935,7 +935,7 @@ TEST_F(
935935
})"_sv)));
936936

937937
this->linter.lint_calls.clear();
938-
auto lint_callback = [&](Configuration& config, Linter_Options,
938+
auto lint_callback = [&](Configuration& config, File_Language,
939939
Padded_String_View, String8_View, String8_View,
940940
Outgoing_JSON_RPC_Message_Queue&) {
941941
EXPECT_FALSE(
@@ -971,7 +971,7 @@ TEST_F(Test_Linting_LSP_Server,
971971
this->fs.create_file(this->fs.rooted("a%b~/quick-lint-js.config"),
972972
u8R"({"globals": {"testGlobalVariable": true}})"_sv);
973973

974-
auto lint_callback = [&](Configuration& config, Linter_Options,
974+
auto lint_callback = [&](Configuration& config, File_Language,
975975
Padded_String_View, String8_View, String8_View,
976976
Outgoing_JSON_RPC_Message_Queue&) {
977977
EXPECT_TRUE(
@@ -999,7 +999,7 @@ TEST_F(Test_Linting_LSP_Server,
999999
}
10001000

10011001
TEST_F(Test_Linting_LSP_Server, linting_uses_already_opened_config_file) {
1002-
auto lint_callback = [&](Configuration& config, Linter_Options,
1002+
auto lint_callback = [&](Configuration& config, File_Language,
10031003
Padded_String_View, String8_View, String8_View,
10041004
Outgoing_JSON_RPC_Message_Queue&) {
10051005
EXPECT_TRUE(config.globals().find_runtime_or_type(u8"modified"_sv));
@@ -1044,7 +1044,7 @@ TEST_F(Test_Linting_LSP_Server, linting_uses_already_opened_config_file) {
10441044

10451045
TEST_F(Test_Linting_LSP_Server,
10461046
linting_uses_already_opened_shadowing_config_file) {
1047-
auto lint_callback = [&](Configuration& config, Linter_Options,
1047+
auto lint_callback = [&](Configuration& config, File_Language,
10481048
Padded_String_View, String8_View, String8_View,
10491049
Outgoing_JSON_RPC_Message_Queue&) {
10501050
EXPECT_TRUE(config.globals().find_runtime_or_type(u8"haveInnerConfig"_sv));
@@ -1091,7 +1091,7 @@ TEST_F(Test_Linting_LSP_Server,
10911091
TEST_F(Test_Linting_LSP_Server, editing_config_relints_open_js_file) {
10921092
bool after_config_was_loaded = false;
10931093

1094-
auto lint_callback = [&](Configuration& config, Linter_Options,
1094+
auto lint_callback = [&](Configuration& config, File_Language,
10951095
Padded_String_View, String8_View uri_json,
10961096
String8_View version_json,
10971097
Outgoing_JSON_RPC_Message_Queue&) {
@@ -1221,7 +1221,7 @@ TEST_F(Test_Linting_LSP_Server,
12211221
}
12221222
})"_sv)));
12231223

1224-
auto lint_callback = [&](Configuration&, Linter_Options, Padded_String_View,
1224+
auto lint_callback = [&](Configuration&, File_Language, Padded_String_View,
12251225
String8_View, String8_View version_json,
12261226
Outgoing_JSON_RPC_Message_Queue&) {
12271227
EXPECT_EQ(version_json, u8"11"_sv);
@@ -1257,7 +1257,7 @@ TEST_F(Test_Linting_LSP_Server,
12571257
}
12581258

12591259
TEST_F(Test_Linting_LSP_Server, editing_config_relints_many_open_js_files) {
1260-
auto lint_callback = [&](Configuration&, Linter_Options, Padded_String_View,
1260+
auto lint_callback = [&](Configuration&, File_Language, Padded_String_View,
12611261
String8_View uri_json, String8_View version_json,
12621262
Outgoing_JSON_RPC_Message_Queue& outgoing_messages) {
12631263
Byte_Buffer& notification_json = outgoing_messages.new_message();
@@ -1371,7 +1371,7 @@ TEST_F(Test_Linting_LSP_Server, editing_config_relints_many_open_js_files) {
13711371
}
13721372

13731373
TEST_F(Test_Linting_LSP_Server, editing_config_relints_only_affected_js_files) {
1374-
auto lint_callback = [&](Configuration&, Linter_Options, Padded_String_View,
1374+
auto lint_callback = [&](Configuration&, File_Language, Padded_String_View,
13751375
String8_View uri_json, String8_View version_json,
13761376
Outgoing_JSON_RPC_Message_Queue& outgoing_messages) {
13771377
Byte_Buffer& notification_json = outgoing_messages.new_message();
@@ -1551,7 +1551,7 @@ TEST_F(Test_Linting_LSP_Server,
15511551
})"_sv)));
15521552

15531553
this->linter.lint_calls.clear();
1554-
auto lint_callback = [&](Configuration& config, Linter_Options,
1554+
auto lint_callback = [&](Configuration& config, File_Language,
15551555
Padded_String_View, String8_View,
15561556
String8_View version_json,
15571557
Outgoing_JSON_RPC_Message_Queue&) {
@@ -1586,7 +1586,7 @@ TEST_F(Test_Linting_LSP_Server,
15861586
TEST_F(Test_Linting_LSP_Server, opening_config_relints_open_js_files) {
15871587
bool after_config_was_loaded = false;
15881588

1589-
auto lint_callback = [&](Configuration& config, Linter_Options,
1589+
auto lint_callback = [&](Configuration& config, File_Language,
15901590
Padded_String_View, String8_View uri_json,
15911591
String8_View version_json,
15921592
Outgoing_JSON_RPC_Message_Queue&) {
@@ -1657,7 +1657,7 @@ TEST_F(Test_Linting_LSP_Server,
16571657
})"_sv)));
16581658

16591659
bool after_config_was_loaded = false;
1660-
auto lint_callback = [&](Configuration& config, Linter_Options,
1660+
auto lint_callback = [&](Configuration& config, File_Language,
16611661
Padded_String_View, String8_View uri_json,
16621662
String8_View version_json,
16631663
Outgoing_JSON_RPC_Message_Queue& outgoing_messages) {
@@ -1703,7 +1703,7 @@ TEST_F(Test_Linting_LSP_Server,
17031703
TEST_F(
17041704
Test_Linting_LSP_Server,
17051705
linting_uses_config_from_filesystem_if_config_is_opened_then_closed_before_opening_js_file) {
1706-
auto lint_callback = [&](Configuration& config, Linter_Options,
1706+
auto lint_callback = [&](Configuration& config, File_Language,
17071707
Padded_String_View, String8_View, String8_View,
17081708
Outgoing_JSON_RPC_Message_Queue&) {
17091709
EXPECT_TRUE(config.globals().find_runtime_or_type(u8"v1"_sv));
@@ -1795,7 +1795,7 @@ TEST_F(Test_Linting_LSP_Server,
17951795
})"_sv)));
17961796

17971797
this->linter.lint_calls.clear();
1798-
auto lint_callback = [&](Configuration& config, Linter_Options,
1798+
auto lint_callback = [&](Configuration& config, File_Language,
17991799
Padded_String_View, String8_View, String8_View,
18001800
Outgoing_JSON_RPC_Message_Queue& outgoing_messages) {
18011801
EXPECT_TRUE(
@@ -1842,7 +1842,7 @@ TEST_F(Test_Linting_LSP_Server, opening_js_file_with_unreadable_config_lints) {
18421842
};
18431843
this->fs.create_file(this->fs.rooted("quick-lint-js.config"),
18441844
failing_read_file_callback);
1845-
auto lint_callback = [&](Configuration& config, Linter_Options,
1845+
auto lint_callback = [&](Configuration& config, File_Language,
18461846
Padded_String_View, String8_View uri_json,
18471847
String8_View version_json,
18481848
Outgoing_JSON_RPC_Message_Queue& outgoing_messages) {
@@ -1907,7 +1907,7 @@ TEST_F(Test_Linting_LSP_Server,
19071907
opening_js_file_with_invalid_config_json_lints) {
19081908
this->fs.create_file(this->fs.rooted("quick-lint-js.config"),
19091909
u8"INVALID JSON"_sv);
1910-
auto lint_callback = [&](Configuration& config, Linter_Options,
1910+
auto lint_callback = [&](Configuration& config, File_Language,
19111911
Padded_String_View, String8_View uri_json,
19121912
String8_View version_json,
19131913
Outgoing_JSON_RPC_Message_Queue& outgoing_messages) {
@@ -1999,7 +1999,7 @@ TEST_F(Test_Linting_LSP_Server, making_config_file_unreadable_relints) {
19991999
};
20002000
this->fs.create_file(this->fs.rooted("quick-lint-js.config"),
20012001
failing_read_file_callback);
2002-
auto lint_callback = [&](Configuration& config, Linter_Options,
2002+
auto lint_callback = [&](Configuration& config, File_Language,
20032003
Padded_String_View, String8_View uri_json,
20042004
String8_View version_json,
20052005
Outgoing_JSON_RPC_Message_Queue& outgoing_messages) {
@@ -2527,8 +2527,8 @@ TEST(Test_LSP_JavaScript_Linter, linting_gives_diagnostics) {
25272527
Configuration config;
25282528

25292529
LSP_JavaScript_Linter linter;
2530-
linter.lint(config, Linter_Options(), &code, u8"\"file:///test.js\""_sv,
2531-
u8"10"_sv, notifications);
2530+
linter.lint(config, File_Language::javascript, &code,
2531+
u8"\"file:///test.js\""_sv, u8"10"_sv, notifications);
25322532

25332533
Spy_LSP_Endpoint_Remote endpoint;
25342534
notifications.send(endpoint);

0 commit comments

Comments
 (0)