Skip to content

Commit 73320b7

Browse files
committed
更新0.10.0
1 parent 5768f14 commit 73320b7

File tree

8 files changed

+82
-9
lines changed

8 files changed

+82
-9
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
11
# Change Log
2+
3+
## 0.10.0
4+
5+
`NEW` vscode插件端实现配置EmmyluaCodeStyle开关`模块诊断`,`代码风格诊断`, `模块补全`.
6+
7+
`NEW` 行距诊断换一种表现方式
8+
9+
`NEW` 支持通过设置`align_chained_expression_statement=true`使链式表达式对齐到第一个'.'或者':'
10+
11+
`NEW` 支持通过设置`if_branch_comments_after_block_no_indent`允许else或者elseif之上的注释对齐到关键词上
12+
13+
214
## 0.9.7
315

416
`IMPL` [#31](https://github.com/CppCXY/EmmyLuaCodeStyle/issues/31)

CodeFormatServer/src/LanguageClient.cpp

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,15 @@ void LanguageClient::DiagnosticFile(std::string_view uri)
153153
return;
154154
}
155155

156-
auto formatDiagnostic = GetService<CodeFormatService>()->Diagnose(filename, parser, options);
157-
auto moduleDiagnosis = GetService<ModuleService>()->Diagnose(filename, parser);
156+
if (_vscodeSettings.lintCodeStyle) {
157+
auto formatDiagnostic = GetService<CodeFormatService>()->Diagnose(filename, parser, options);
158+
std::copy(formatDiagnostic.begin(), formatDiagnostic.end(), std::back_inserter(vscodeDiagnosis->diagnostics));
159+
}
158160

159-
std::copy(formatDiagnostic.begin(), formatDiagnostic.end(), std::back_inserter(vscodeDiagnosis->diagnostics));
160-
std::copy(moduleDiagnosis.begin(), moduleDiagnosis.end(), std::back_inserter(vscodeDiagnosis->diagnostics));
161+
if (_vscodeSettings.lintModule) {
162+
auto moduleDiagnosis = GetService<ModuleService>()->Diagnose(filename, parser);
163+
std::copy(moduleDiagnosis.begin(), moduleDiagnosis.end(), std::back_inserter(vscodeDiagnosis->diagnostics));
164+
}
161165

162166
SendNotification("textDocument/publishDiagnostics", vscodeDiagnosis);
163167
}
@@ -311,6 +315,16 @@ asio::io_context& LanguageClient::GetIOContext()
311315
return _ioc;
312316
}
313317

318+
vscode::VscodeSettings LanguageClient::GetSettings() const
319+
{
320+
return _vscodeSettings;
321+
}
322+
323+
void LanguageClient::SetVscodeSettings(vscode::VscodeSettings& settings)
324+
{
325+
_vscodeSettings = settings;
326+
}
327+
314328
uint64_t LanguageClient::GetRequestId()
315329
{
316330
return ++_idCounter;

CodeFormatServer/src/LanguageService.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ std::shared_ptr<vscode::InitializeResult> LanguageService::OnInitialize(std::sha
7373
result->capabilities.textDocumentSync.change = vscode::TextDocumentSyncKind::Incremental;
7474
result->capabilities.textDocumentSync.openClose = true;
7575

76+
LanguageClient::GetInstance().SetVscodeSettings(param->initializationOptions.vscodeConfig);
77+
7678
result->capabilities.codeActionProvider = true;
7779
result->capabilities.executeCommandProvider.commands = {
7880
"emmylua.reformat.me",
@@ -341,6 +343,11 @@ std::shared_ptr<vscode::CodeActionResult> LanguageService::OnCodeAction(std::sha
341343
auto filePath = url::UrlToFilePath(uri);
342344
auto codeActionResult = std::make_shared<vscode::CodeActionResult>();
343345

346+
if(!LanguageClient::GetInstance().GetSettings().autoImport)
347+
{
348+
return codeActionResult;
349+
}
350+
344351
if (LanguageClient::GetInstance().GetService<CodeFormatService>()->IsDiagnosticRange(filePath, range))
345352
{
346353
auto& action = codeActionResult->actions.emplace_back();
@@ -493,13 +500,19 @@ std::shared_ptr<vscode::Serializable> LanguageService::OnDidChangeWatchedFiles(
493500

494501
std::shared_ptr<vscode::CompletionList> LanguageService::OnCompletion(std::shared_ptr<vscode::CompletionParams> param)
495502
{
503+
auto list = std::make_shared<vscode::CompletionList>();
504+
505+
if(!LanguageClient::GetInstance().GetSettings().autoImport)
506+
{
507+
return list;
508+
}
509+
496510
auto uri = param->textDocument.uri;
497511

498512
auto parser = LanguageClient::GetInstance().GetFileParser(uri);
499513

500514
auto options = LanguageClient::GetInstance().GetOptions(uri);
501515

502-
auto list = std::make_shared<vscode::CompletionList>();
503516
list->isIncomplete = true;
504517
list->items = LanguageClient::GetInstance().GetService<CompletionService>()->GetCompletions(
505518
param->textDocument.uri, param->position, parser, options);

CodeFormatServer/src/VSCode.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,11 @@ void vscode::InitializationOptions::Deserialize(nlohmann::json json)
201201
{
202202
extensionChars = json["extensionChars"];
203203
}
204+
205+
if(json["vscodeConfig"].is_object())
206+
{
207+
vscodeConfig.Deserialize(json["vscodeConfig"]);
208+
}
204209
}
205210

206211
void vscode::InitializeParams::Deserialize(nlohmann::json json)
@@ -307,6 +312,13 @@ void vscode::ConfigSource::Deserialize(nlohmann::json json)
307312
workspace = json["workspace"];
308313
}
309314

315+
void vscode::VscodeSettings::Deserialize(nlohmann::json json)
316+
{
317+
lintCodeStyle = json["lint.codeStyle"];
318+
lintModule = json["lint.moduleCheck"];
319+
autoImport = json["autoImport"];
320+
}
321+
310322
void vscode::ConfigUpdateParams::Deserialize(nlohmann::json json)
311323
{
312324
type = json["type"];

CodeService/src/FormatElement/KeepLineElement.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,11 @@ void KeepLineElement::Diagnosis(DiagnosisContext& ctx, ChildIterator selfIt,
5656

5757
if (_line != (nextElementLine - lastElementLine - 1))
5858
{
59-
ctx.PushDiagnosis(format(LText("here need keep {} line"), _line),
60-
TextRange(lastElementOffset, nextElementOffset));
59+
auto character = ctx.GetColumn(nextElementOffset);
60+
61+
ctx.PushDiagnosis(format(LText("here need keep {} empty line"), _line),
62+
LuaDiagnosisPosition(nextElementLine, character),
63+
LuaDiagnosisPosition(nextElementLine + 1, 0));
6164
}
6265
}
6366
}

CodeService/src/FormatElement/MinLineElement.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,14 @@ void MinLineElement::Diagnosis(DiagnosisContext& ctx, ChildIterator selfIt, Form
5454
}
5555

5656
const int lastElementLine = ctx.GetLine(lastOffset);
57-
const int nextElementLine = nextOffset == -1 ? -1 : ctx.GetLine(nextOffset);
57+
const int nextElementLine = ctx.GetLine(nextOffset);
5858

5959
if (_line > (nextElementLine - lastElementLine - 1))
6060
{
61-
ctx.PushDiagnosis(format(LText("here need at least {} line"), _line), TextRange(lastOffset, nextOffset));
61+
auto character = ctx.GetColumn(nextOffset);
62+
ctx.PushDiagnosis(format(LText("here need at least {} empty line"), _line),
63+
LuaDiagnosisPosition(nextElementLine, character),
64+
LuaDiagnosisPosition(nextElementLine + 1, 0));
6265
}
6366
ctx.SetCharacterCount(0);
6467
}

include/CodeFormatServer/LanguageClient.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ class LanguageClient : public std::enable_shared_from_this<LanguageClient>
6969
template <ServiceClass Service>
7070
std::shared_ptr<Service> GetService();
7171

72+
vscode::VscodeSettings GetSettings() const;
73+
74+
void SetVscodeSettings(vscode::VscodeSettings& settings);
7275
private:
7376
uint64_t GetRequestId();
7477

@@ -91,6 +94,8 @@ class LanguageClient : public std::enable_shared_from_this<LanguageClient>
9194
asio::io_context _ioc;
9295

9396
std::array<std::shared_ptr<Service>, static_cast<std::size_t>(ServiceType::ServiceCount)> _services;
97+
98+
vscode::VscodeSettings _vscodeSettings;
9499
};
95100

96101
template <ServiceClass Service>

include/CodeFormatServer/VSCode.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,16 @@ class ServerCapabilities : public Serializable
240240

241241
class ConfigSource;
242242

243+
class VscodeSettings : public Serializable
244+
{
245+
public:
246+
bool lintCodeStyle = true;
247+
bool lintModule = true;
248+
bool autoImport = true;
249+
250+
void Deserialize(nlohmann::json json) override;
251+
};
252+
243253
class InitializationOptions : public Serializable
244254
{
245255
public:
@@ -248,6 +258,7 @@ class InitializationOptions : public Serializable
248258
std::vector<ConfigSource> moduleConfigFiles;
249259
std::string localeRoot;
250260
std::string extensionChars;
261+
VscodeSettings vscodeConfig;
251262
void Deserialize(nlohmann::json json) override;
252263
};
253264

0 commit comments

Comments
 (0)