22#include " CodeFormatServer/VSCode.h"
33#include " CodeService/LuaFormatOptions.h"
44#include " CodeService/LuaFormatter.h"
5+ #include " CodeFormatServer/LanguageClient.h"
56
67using namespace std ::placeholders;
78
@@ -25,7 +26,7 @@ bool LanguageService::Initialize()
2526}
2627
2728std::shared_ptr<vscode::Serializable> LanguageService::Dispatch (std::string_view method,
28- std::shared_ptr<vscode::Serializable> param)
29+ std::shared_ptr<vscode::Serializable> param)
2930{
3031 auto it = _handles.find (method);
3132 if (it != _handles.end ())
@@ -49,15 +50,35 @@ std::shared_ptr<vscode::Serializable> LanguageService::OnDidChange(
4950 std::shared_ptr<vscode::DidChangeTextDocumentParams> param)
5051{
5152 LuaFormatOptions options;
52-
53+
5354 std::shared_ptr<LuaParser> parser = LuaParser::LoadFromBuffer (std::move (param->contentChanges [0 ].text ));
5455 parser->BuildAstWithComment ();
5556
5657 LuaFormatter formatter (parser, options);
5758 formatter.BuildFormattedElement ();
5859
59- auto diagnosis = formatter.GetDiagnosisInfos ();
60+ auto diagnosisInfos = formatter.GetDiagnosisInfos ();
6061
62+ auto vscodeDiagnosis = std::make_shared<vscode::PublishDiagnosticsParams>();
63+ vscodeDiagnosis->uri = param->textDocument .uri ;
6164
65+ for (auto diagnosisInfo : diagnosisInfos)
66+ {
67+ auto & diagnosis = vscodeDiagnosis->diagnostics .emplace_back ();
68+ diagnosis.message = diagnosisInfo.Message ;
69+ diagnosis.range = vscode::Range (
70+ vscode::Position (
71+ diagnosisInfo.Range .Start .Line ,
72+ diagnosisInfo.Range .Start .Character
73+ ),
74+ vscode::Position (
75+ diagnosisInfo.Range .End .Line ,
76+ diagnosisInfo.Range .End .Character
77+ ));
78+ diagnosis.severity = vscode::DiagnosticSeverity::Warning;
79+ }
6280
81+ LanguageClient::GetInstance ().SendNotification (" textDocument/publishDiagnostics" , vscodeDiagnosis);
82+
83+ return nullptr ;
6384}
0 commit comments