Skip to content

Commit 19ba80c

Browse files
committed
基本支持auto import
1 parent 9febb82 commit 19ba80c

File tree

29 files changed

+898
-270
lines changed

29 files changed

+898
-270
lines changed

3rd/uriparser/src/config.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343

4444
#define PACKAGE_VERSION "0.9.5"
4545

46-
#define HAVE_WPRINTF
46+
/* #undef HAVE_WPRINTF */
4747
/* #undef HAVE_REALLOCARRAY */
4848

4949

CodeFormatServer/CMakeLists.txt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ target_sources(CodeFormatServer
3232
${CodeFormatServer_SOURCE_DIR}/src/LanguageClient.cpp
3333
${CodeFormatServer_SOURCE_DIR}/src/LanguageService.cpp
3434
${CodeFormatServer_SOURCE_DIR}/src/VirtualFile/VirtualFile.cpp
35-
${CodeFormatServer_SOURCE_DIR}/src/Service/Indexs/ModuleIndex.cpp
3635
${CodeFormatServer_SOURCE_DIR}/src/Session/IOSession.cpp
3736
${CodeFormatServer_SOURCE_DIR}/src/Session/SocketIOSession.cpp
3837
${CodeFormatServer_SOURCE_DIR}/src/Session/StandardIOSession.cpp
@@ -42,11 +41,22 @@ target_sources(CodeFormatServer
4241
${CodeFormatServer_SOURCE_DIR}/src/Protocol/ProtocolBuffer.cpp
4342

4443
${CodeFormatServer_SOURCE_DIR}/src/VSCode.cpp
44+
45+
#Service/indexs
46+
${CodeFormatServer_SOURCE_DIR}/src/Service/Indexs/ModuleIndex.cpp
47+
48+
#Service/indexs/Config
49+
${CodeFormatServer_SOURCE_DIR}/src/Service/Indexs/Config/ModuleConfig.cpp
50+
51+
#Service/AstUtil
52+
${CodeFormatServer_SOURCE_DIR}/src/Service/AstUtil/ModuleFinder.cpp
4553

4654
#service
4755
${CodeFormatServer_SOURCE_DIR}/src/Service/Service.cpp
4856
${CodeFormatServer_SOURCE_DIR}/src/Service/ModuleService.cpp
4957
${CodeFormatServer_SOURCE_DIR}/src/Service/CodeFormatService.cpp
58+
${CodeFormatServer_SOURCE_DIR}/src/Service/CompletionService.cpp
59+
5060
# mimalloc
5161
${LuaCodeStyle_SOURCE_DIR}/3rd/mimalloc-2.0.3/src/static.c
5262
)

CodeFormatServer/src/LanguageClient.cpp

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
#include "CodeFormatServer/Service/ModuleService.h"
1111
#include "CodeFormatServer/Service/CodeFormatService.h"
12+
#include "CodeFormatServer/Service/CompletionService.h"
1213

1314

1415
LanguageClient& LanguageClient::GetInstance()
@@ -27,6 +28,17 @@ void LanguageClient::InitializeService()
2728
{
2829
AddService<CodeFormatService>();
2930
AddService<ModuleService>();
31+
AddService<CompletionService>();
32+
33+
for(auto service : _services)
34+
{
35+
service->Initialize();
36+
}
37+
38+
for(auto service : _services)
39+
{
40+
service->Start();
41+
}
3042
}
3143

3244
void LanguageClient::SetSession(std::shared_ptr<IOSession> session)
@@ -118,7 +130,7 @@ void LanguageClient::DiagnosticFile(std::string_view uri)
118130
}
119131

120132
auto formatDiagnostic = GetService<CodeFormatService>()->Diagnose(filename, parser, options);
121-
auto moduleDiagnosis = GetService<ModuleService>()->Diagnose(filename, parser, options);
133+
auto moduleDiagnosis = GetService<ModuleService>()->Diagnose(filename, parser);
122134

123135
std::copy(formatDiagnostic.begin(), formatDiagnostic.end(), std::back_inserter(vscodeDiagnosis->diagnostics));
124136
std::copy(moduleDiagnosis.begin(), moduleDiagnosis.end(), std::back_inserter(vscodeDiagnosis->diagnostics));
@@ -172,7 +184,7 @@ std::shared_ptr<LuaCodeStyleOptions> LanguageClient::GetOptions(std::string_view
172184
return options;
173185
}
174186

175-
void LanguageClient::UpdateOptions(std::string_view workspaceUri, std::string_view configPath)
187+
void LanguageClient::UpdateCodeStyleOptions(std::string_view workspaceUri, std::string_view configPath)
176188
{
177189
auto workspace = url::UrlToFilePath(workspaceUri);
178190
for (auto& pair : _editorConfigVector)
@@ -194,7 +206,7 @@ void LanguageClient::UpdateOptions(std::string_view workspaceUri, std::string_vi
194206
_editorConfigVector.back().second->SetRootWorkspace(_root);
195207
}
196208

197-
void LanguageClient::RemoveOptions(std::string_view workspaceUri)
209+
void LanguageClient::RemoveCodeStyleOptions(std::string_view workspaceUri)
198210
{
199211
auto workspace = url::UrlToFilePath(workspaceUri);
200212
for (auto it = _editorConfigVector.begin(); it != _editorConfigVector.end(); it++)
@@ -208,6 +220,15 @@ void LanguageClient::RemoveOptions(std::string_view workspaceUri)
208220
}
209221

210222
void LanguageClient::UpdateAllDiagnosis()
223+
{
224+
for (auto it : _fileMap)
225+
{
226+
auto uri = url::FilePathToUrl(it.first);
227+
DiagnosticFile(uri);
228+
}
229+
}
230+
231+
void LanguageClient::UpdateModuleInfo()
211232
{
212233
FileFinder finder(_root);
213234

@@ -222,19 +243,11 @@ void LanguageClient::UpdateAllDiagnosis()
222243
finder.AddFindExtension(".lua.txt");
223244

224245
GetService<ModuleService>()->GetIndex().RebuildIndex(finder.FindFiles());
225-
226-
for (auto it : _fileMap)
227-
{
228-
auto uri = url::FilePathToUrl(it.first);
229-
DiagnosticFile(uri);
230-
}
231246
}
232247

233248
void LanguageClient::SetRoot(std::string_view root)
234249
{
235250
_root = root;
236-
_defaultOptions->export_root = root;
237-
_defaultOptions->import_from.emplace_back(root);
238251
}
239252

240253
uint64_t LanguageClient::GetRequestId()

CodeFormatServer/src/LanguageService.cpp

Lines changed: 68 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "CodeFormatServer/LanguageClient.h"
1010
#include "CodeFormatServer/Service/CodeFormatService.h"
1111
#include "CodeFormatServer/Service/ModuleService.h"
12+
#include "CodeFormatServer/Service/CompletionService.h"
1213
#include "Util/Url.h"
1314
#include "Util/format.h"
1415

@@ -29,7 +30,8 @@ bool LanguageService::Initialize()
2930
JsonProtocol("textDocument/didChange", &LanguageService::OnDidChange);
3031
JsonProtocol("textDocument/didOpen", &LanguageService::OnDidOpen);
3132
JsonProtocol("textDocument/didClose", &LanguageService::OnClose);
32-
JsonProtocol("updateEditorConfig", &LanguageService::OnEditorConfigUpdate);
33+
JsonProtocol("config/editorconfig/update", &LanguageService::OnEditorConfigUpdate);
34+
JsonProtocol("config/moduleconfig/update", &LanguageService::OnModuleConfigUpdate);
3335
JsonProtocol("textDocument/formatting", &LanguageService::OnFormatting);
3436
JsonProtocol("textDocument/rangeFormatting", &LanguageService::OnRangeFormatting);
3537
JsonProtocol("textDocument/onTypeFormatting", &LanguageService::OnTypeFormatting);
@@ -78,12 +80,21 @@ std::shared_ptr<vscode::InitializeResult> LanguageService::OnInitialize(std::sha
7880
result->capabilities.completionProvider.resolveProvider = false;
7981
result->capabilities.completionProvider.triggerCharacters = {};
8082

81-
auto& configFiles = param->initializationOptions.configFiles;
82-
for (auto& configFile : configFiles)
83+
auto& editorConfigFiles = param->initializationOptions.editorConfigFiles;
84+
for (auto& configFile : editorConfigFiles)
8385
{
84-
LanguageClient::GetInstance().UpdateOptions(configFile.workspace, configFile.path);
86+
LanguageClient::GetInstance().UpdateCodeStyleOptions(configFile.workspace, configFile.path);
8587
}
8688

89+
auto& moduleConfigFiles = param->initializationOptions.moduleConfigFiles;
90+
for (auto& configFile : moduleConfigFiles)
91+
{
92+
LanguageClient::GetInstance().GetService<ModuleService>()->GetIndex().BuildModule(
93+
configFile.workspace, configFile.path);
94+
}
95+
96+
LanguageClient::GetInstance().GetService<ModuleService>()->GetIndex().SetDefaultModule(param->rootPath);
97+
8798
std::filesystem::path localePath = param->initializationOptions.localeRoot;
8899
localePath /= param->locale + ".json";
89100

@@ -117,7 +128,7 @@ std::shared_ptr<vscode::InitializeResult> LanguageService::OnInitialize(std::sha
117128

118129
std::shared_ptr<vscode::Serializable> LanguageService::OnInitialized(std::shared_ptr<vscode::Serializable> param)
119130
{
120-
LanguageClient::GetInstance().UpdateAllDiagnosis();
131+
LanguageClient::GetInstance().UpdateModuleInfo();
121132
return nullptr;
122133
}
123134

@@ -189,19 +200,19 @@ std::shared_ptr<vscode::Serializable> LanguageService::OnClose(
189200
}
190201

191202
std::shared_ptr<vscode::Serializable> LanguageService::OnEditorConfigUpdate(
192-
std::shared_ptr<vscode::EditorConfigUpdateParams> param)
203+
std::shared_ptr<vscode::ConfigUpdateParams> param)
193204
{
194205
switch (param->type)
195206
{
196207
case vscode::FileChangeType::Created:
197208
case vscode::FileChangeType::Changed:
198209
{
199-
LanguageClient::GetInstance().UpdateOptions(param->source.workspace, param->source.path);
210+
LanguageClient::GetInstance().UpdateCodeStyleOptions(param->source.workspace, param->source.path);
200211
break;
201212
}
202213
case vscode::FileChangeType::Delete:
203214
{
204-
LanguageClient::GetInstance().RemoveOptions(param->source.workspace);
215+
LanguageClient::GetInstance().RemoveCodeStyleOptions(param->source.workspace);
205216
break;
206217
}
207218
}
@@ -211,6 +222,33 @@ std::shared_ptr<vscode::Serializable> LanguageService::OnEditorConfigUpdate(
211222
return nullptr;
212223
}
213224

225+
226+
std::shared_ptr<vscode::Serializable> LanguageService::OnModuleConfigUpdate(
227+
std::shared_ptr<vscode::ConfigUpdateParams> param)
228+
{
229+
switch (param->type)
230+
{
231+
case vscode::FileChangeType::Created:
232+
case vscode::FileChangeType::Changed:
233+
{
234+
LanguageClient::GetInstance().GetService<ModuleService>()
235+
->GetIndex().BuildModule(param->source.workspace, param->source.path);
236+
break;
237+
}
238+
case vscode::FileChangeType::Delete:
239+
{
240+
LanguageClient::GetInstance().GetService<ModuleService>()
241+
->GetIndex().RemoveModule(param->source.workspace);
242+
break;
243+
}
244+
}
245+
246+
LanguageClient::GetInstance().UpdateModuleInfo();
247+
248+
return nullptr;
249+
}
250+
251+
214252
std::shared_ptr<vscode::Serializable> LanguageService::OnRangeFormatting(
215253
std::shared_ptr<vscode::DocumentRangeFormattingParams> param)
216254
{
@@ -371,15 +409,22 @@ std::shared_ptr<vscode::Serializable> LanguageService::OnExecuteCommand(
371409
}
372410

373411
std::string uri = param->arguments[0];
412+
std::string filePath = url::UrlToFilePath(uri);
413+
auto config = LanguageClient::GetInstance().GetService<ModuleService>()->GetIndex().GetConfig(filePath);
414+
if(!config)
415+
{
416+
return nullptr;
417+
}
374418
vscode::Range range;
375419

376420
range.Deserialize(param->arguments[1]);
377421

378422
std::string moduleName = param->arguments[2];
379-
auto pos = moduleName.find_last_of('.');
423+
380424
std::string moduleDefineName = param->arguments[3];
381425

382-
std::string requireString = format("local {} = require(\"{}\")\n", moduleDefineName, moduleName);
426+
std::string requireString = format("local {} = {}(\"{}\")\n", moduleDefineName, config->import_function,
427+
moduleName);
383428
auto parser = LanguageClient::GetInstance().GetFileParser(uri);
384429

385430
auto applyParams = std::make_shared<vscode::ApplyWorkspaceEditParams>();
@@ -426,7 +471,18 @@ std::shared_ptr<vscode::Serializable> LanguageService::OnDidChangeWatchedFiles(
426471
return nullptr;
427472
}
428473

429-
std::shared_ptr<vscode::Serializable> LanguageService::OnCompletion(std::shared_ptr<vscode::CompletionParams> param)
474+
std::shared_ptr<vscode::CompletionList> LanguageService::OnCompletion(std::shared_ptr<vscode::CompletionParams> param)
430475
{
431-
return nullptr;
476+
auto uri = param->textDocument.uri;
477+
478+
auto parser = LanguageClient::GetInstance().GetFileParser(uri);
479+
480+
auto options = LanguageClient::GetInstance().GetOptions(uri);
481+
482+
auto list = std::make_shared<vscode::CompletionList>();
483+
list->isIncomplete = true;
484+
list->items = LanguageClient::GetInstance().GetService<CompletionService>()->GetCompletions(
485+
param->textDocument.uri, param->position, parser, options);
486+
487+
return list;
432488
}

0 commit comments

Comments
 (0)