1- #include " CodeFormatServer/LanguageService.h"
1+ #include " CodeFormatServer/LanguageService.h"
22#include < fstream>
33#include < iostream>
44#include < sstream>
99#include " CodeService/LuaFormatter.h"
1010#include " CodeFormatServer/LanguageClient.h"
1111#include " CodeFormatServer/Service/CodeFormatService.h"
12+ #include " CodeFormatServer/Service/CommandService.h"
1213#include " CodeFormatServer/Service/ModuleService.h"
1314#include " CodeFormatServer/Service/CompletionService.h"
1415#include " Util/Url.h"
@@ -76,15 +77,14 @@ std::shared_ptr<vscode::InitializeResult> LanguageService::OnInitialize(std::sha
7677 LanguageClient::GetInstance ().SetVscodeSettings (param->initializationOptions .vscodeConfig );
7778
7879 result->capabilities .codeActionProvider = true ;
79- result->capabilities .executeCommandProvider .commands = {
80- " emmylua.reformat.me" ,
81- " emmylua.import.me" ,
82- " emmylua.spell.correct"
83- };
80+ result->capabilities .executeCommandProvider .commands =
81+ LanguageClient::GetInstance ().GetService <CommandService>()->GetCommands ();
8482
85- result->capabilities .completionProvider .resolveProvider = false ;
86- result->capabilities .completionProvider .triggerCharacters = {};
87- result->capabilities .completionProvider .completionItem .labelDetailsSupport = true ;
83+ // result->capabilities.completionProvider.resolveProvider = false;
84+ // result->capabilities.completionProvider.triggerCharacters = {};
85+ // result->capabilities.completionProvider.completionItem.labelDetailsSupport = true;
86+ // 砍掉代码补全
87+ result->capabilities .completionProvider .supportCompletion = false ;
8888
8989 auto & editorConfigFiles = param->initializationOptions .editorConfigFiles ;
9090 for (auto & configFile : editorConfigFiles)
@@ -344,6 +344,7 @@ std::shared_ptr<vscode::Serializable> LanguageService::OnTypeFormatting(
344344
345345std::shared_ptr<vscode::CodeActionResult> LanguageService::OnCodeAction (std::shared_ptr<vscode::CodeActionParams> param)
346346{
347+ // TODO refactor move to CodeActionService
347348 auto range = param->range ;
348349 auto uri = param->textDocument .uri ;
349350 auto filePath = url::UrlToFilePath (uri);
@@ -354,27 +355,34 @@ std::shared_ptr<vscode::CodeActionResult> LanguageService::OnCodeAction(std::sha
354355 if (LanguageClient::GetInstance ().GetService <CodeFormatService>()->IsCodeFormatDiagnostic (diagnostic))
355356 {
356357 auto & action = codeActionResult->actions .emplace_back ();
357- std::string title = " reformat" ;
358+ std::string title = " reformat current line " ;
358359 action.title = title;
359360 action.command .title = title;
360- action.command .command = " emmylua.reformat.me" ;
361+ action.command .command = LanguageClient::GetInstance ().
362+ GetService<CommandService>()->GetCommand (CommandService::Command::Reformat);
361363 action.command .arguments .push_back (param->textDocument .uri );
362364 action.command .arguments .push_back (param->range .Serialize ());
363365
364366 action.kind = vscode::CodeActionKind::QuickFix;
365367 }
366368 else if (LanguageClient::GetInstance ().GetService <CodeFormatService>()->IsSpellDiagnostic (diagnostic))
367369 {
368- LanguageClient::GetInstance ().GetService <CodeFormatService>()->MakeSpellActions (codeActionResult, diagnostic, param->textDocument .uri );
370+ LanguageClient::GetInstance ().GetService <CodeFormatService>()->MakeSpellActions (
371+ codeActionResult, diagnostic, param->textDocument .uri );
369372 }
370- else if (LanguageClient::GetInstance ().GetService <ModuleService>()->IsDiagnosticRange (filePath, range ))
373+ else if (LanguageClient::GetInstance ().GetService <ModuleService>()->IsModuleDiagnostic (diagnostic ))
371374 {
372375 auto modules = LanguageClient::GetInstance ().GetService <ModuleService>()->GetImportModules (filePath, range);
373376 auto & action = codeActionResult->actions .emplace_back ();
374- std::string title = " import me" ;
377+ std::string title = " import multi choice" ;
378+ if (modules.size () == 1 )
379+ {
380+ title = Util::format (" import '{}'" , modules.front ().ModuleName );
381+ }
375382 action.title = title;
376383 action.command .title = title;
377- action.command .command = " emmylua.import.me" ;
384+ action.command .command = LanguageClient::GetInstance ().
385+ GetService<CommandService>()->GetCommand (CommandService::Command::Import);
378386 action.command .arguments .push_back (param->textDocument .uri );
379387 action.command .arguments .push_back (param->range .Serialize ());
380388 for (auto & module : modules)
@@ -395,108 +403,8 @@ std::shared_ptr<vscode::CodeActionResult> LanguageService::OnCodeAction(std::sha
395403std::shared_ptr<vscode::Serializable> LanguageService::OnExecuteCommand (
396404 std::shared_ptr<vscode::ExecuteCommandParams> param)
397405{
398- auto result = std::make_shared<vscode::Serializable>();
399- if (param->command == " emmylua.reformat.me" )
400- {
401- if (param->arguments .size () < 2 )
402- {
403- return result;
404- }
405-
406- std::string uri = param->arguments [0 ];
407- vscode::Range range;
408-
409- range.Deserialize (param->arguments [1 ]);
410-
411- auto parser = LanguageClient::GetInstance ().GetFileParser (uri);
412-
413- auto applyParams = std::make_shared<vscode::ApplyWorkspaceEditParams>();
414-
415- auto options = LanguageClient::GetInstance ().GetOptions (uri);
416-
417- if (parser->HasError ())
418- {
419- return result;
420- }
421-
422- auto it = applyParams->edit .changes .emplace (uri, std::vector<vscode::TextEdit>());
423- auto & change = it.first ->second ;
424-
425- auto & edit = change.emplace_back ();
426- LuaFormatRange formattedRange (static_cast <int >(range.start .line ), static_cast <int >(range.end .line ));
427-
428- auto formatResult = LanguageClient::GetInstance ().GetService <CodeFormatService>()->RangeFormat (
429- formattedRange, parser, options);
430-
431- edit.newText = std::move (formatResult);
432-
433- edit.range = vscode::Range (
434- vscode::Position (formattedRange.StartLine , formattedRange.StartCharacter ),
435- vscode::Position (formattedRange.EndLine + 1 , formattedRange.EndCharacter )
436- );
437-
438- LanguageClient::GetInstance ().SendRequest (" workspace/applyEdit" , applyParams);
439- }
440- else if (param->command == " emmylua.import.me" )
441- {
442- if (param->arguments .size () < 4 )
443- {
444- return result;
445- }
446-
447- std::string uri = param->arguments [0 ];
448- std::string filePath = url::UrlToFilePath (uri);
449- auto config = LanguageClient::GetInstance ().GetService <ModuleService>()->GetIndex ().GetConfig (filePath);
450- if (!config)
451- {
452- return nullptr ;
453- }
454- vscode::Range range;
455-
456- range.Deserialize (param->arguments [1 ]);
457-
458- std::string moduleName = param->arguments [2 ];
459-
460- std::string moduleDefineName = param->arguments [3 ];
461-
462- std::string requireString = Util::format (" local {} = {}(\" {}\" )\n " , moduleDefineName, config->import_function ,
463- moduleName);
464- auto parser = LanguageClient::GetInstance ().GetFileParser (uri);
465- auto applyParams = std::make_shared<vscode::ApplyWorkspaceEditParams>();
466- auto it = applyParams->edit .changes .emplace (uri, std::vector<vscode::TextEdit>());
467- auto & change = it.first ->second ;
468-
469- auto & edit = change.emplace_back ();
470-
471- edit.newText = requireString;
472-
473- edit.range = LanguageClient::GetInstance ().GetService <ModuleService>()->FindRequireRange (parser, config);
474-
475- LanguageClient::GetInstance ().SendRequest (" workspace/applyEdit" , applyParams);
476- }
477- else if (param->command == " emmylua.spell.correct" )
478- {
479- std::string uri = param->arguments [0 ];
480- vscode::Range range;
481-
482- range.Deserialize (param->arguments [1 ]);
483-
484- std::string newText = param->arguments [2 ];
485-
486- auto applyParams = std::make_shared<vscode::ApplyWorkspaceEditParams>();
487- auto it = applyParams->edit .changes .emplace (uri, std::vector<vscode::TextEdit>());
488- auto & change = it.first ->second ;
489-
490- auto & edit = change.emplace_back ();
491-
492- edit.newText = newText;
493-
494- edit.range = range;
495-
496- LanguageClient::GetInstance ().SendRequest (" workspace/applyEdit" , applyParams);
497- }
498-
499- return result;
406+ LanguageClient::GetInstance ().GetService <CommandService>()->Dispatch (param->command , param);
407+ return nullptr ;
500408}
501409
502410std::shared_ptr<vscode::Serializable> LanguageService::OnDidChangeWatchedFiles (
@@ -528,6 +436,7 @@ std::shared_ptr<vscode::Serializable> LanguageService::OnDidChangeWatchedFiles(
528436 return nullptr ;
529437}
530438
439+ // @depreacated
531440std::shared_ptr<vscode::CompletionList> LanguageService::OnCompletion (std::shared_ptr<vscode::CompletionParams> param)
532441{
533442 auto list = std::make_shared<vscode::CompletionList>();
0 commit comments