diff --git a/ets2panda/lsp/include/internal_api.h b/ets2panda/lsp/include/internal_api.h index 4c0cbeee7b234b29a1c30ce26fe933bf07a62186..86c27da956f8ef5560788c04cbdfdb84fdb0a50a 100644 --- a/ets2panda/lsp/include/internal_api.h +++ b/ets2panda/lsp/include/internal_api.h @@ -60,9 +60,9 @@ public: es2panda_SuggestionInfo *CreateSuggestionInfo(es2panda_Context *context, const es2panda_DiagnosticKind *kind, const char **args, size_t argc, const char *substitutionCode, - es2panda_SourceRange *range) + const char *title, es2panda_SourceRange *range) { - return impl_->CreateSuggestionInfo(context, kind, args, argc, substitutionCode, range); + return impl_->CreateSuggestionInfo(context, kind, args, argc, substitutionCode, title, range); } es2panda_DiagnosticInfo *CreateDiagnosticInfo(es2panda_Context *context, const es2panda_DiagnosticKind *kind, diff --git a/ets2panda/public/es2panda_lib.cpp b/ets2panda/public/es2panda_lib.cpp index 25a77acc6093cda33d53cbfab7ec29e9563dad80..81b369462330b35829cc53c73e1945778f69c393 100644 --- a/ets2panda/public/es2panda_lib.cpp +++ b/ets2panda/public/es2panda_lib.cpp @@ -926,7 +926,7 @@ extern "C" es2panda_DiagnosticInfo *CreateDiagnosticInfo(es2panda_Context *conte extern "C" es2panda_SuggestionInfo *CreateSuggestionInfo(es2panda_Context *context, const es2panda_DiagnosticKind *kind, const char **args, size_t argc, const char *substitutionCode, - es2panda_SourceRange *range) + const char *title, es2panda_SourceRange *range) { auto *allocator = reinterpret_cast(context)->allocator; auto suggestionInfo = allocator->New(); @@ -934,6 +934,7 @@ extern "C" es2panda_SuggestionInfo *CreateSuggestionInfo(es2panda_Context *conte suggestionInfo->args = args; suggestionInfo->argc = argc; suggestionInfo->substitutionCode = substitutionCode; + suggestionInfo->title = title; suggestionInfo->range = range; return suggestionInfo; } @@ -957,8 +958,8 @@ extern "C" void LogDiagnosticWithSuggestion(es2panda_Context *context, const es2 auto E2pRange = reinterpret_cast(suggestionInfo->range); auto posE2p = reinterpret_cast(diagnosticInfo->pos); - auto suggestion = ctx->diagnosticEngine->CreateSuggestion(suggestionkind, suggestionParams, - suggestionInfo->substitutionCode, E2pRange); + auto suggestion = ctx->diagnosticEngine->CreateSuggestion( + suggestionkind, suggestionParams, suggestionInfo->substitutionCode, suggestionInfo->title, E2pRange); ctx->diagnosticEngine->LogDiagnostic(*diagnostickind, diagnosticParams, *posE2p, suggestion); } diff --git a/ets2panda/public/es2panda_lib.h b/ets2panda/public/es2panda_lib.h index 945578067875d79516a713f9166df6d4274a5089..a1562a4fd690c3c9a576037d2ff968a103a2f1f3 100644 --- a/ets2panda/public/es2panda_lib.h +++ b/ets2panda/public/es2panda_lib.h @@ -146,6 +146,7 @@ typedef struct es2panda_SuggestionInfo { const char **args; size_t argc; const char *substitutionCode; + const char *title; es2panda_SourceRange *range; } es2panda_SuggestionInfo; @@ -243,7 +244,7 @@ struct CAPI_EXPORT es2panda_Impl { const char **args, size_t argc, es2panda_SourcePosition *position); es2panda_SuggestionInfo *(*CreateSuggestionInfo)(es2panda_Context *context, const es2panda_DiagnosticKind *kind, const char **args, size_t argc, const char *substitutionCode, - es2panda_SourceRange *range); + const char *title, es2panda_SourceRange *range); void (*LogDiagnosticWithSuggestion)(es2panda_Context *context, const es2panda_DiagnosticInfo *diagnosticInfo, const es2panda_SuggestionInfo *suggestionInfo); void (*LogDiagnostic)(es2panda_Context *context, const es2panda_DiagnosticKind *kind, const char **args, diff --git a/ets2panda/public/es2panda_lib.idl.erb b/ets2panda/public/es2panda_lib.idl.erb index c52ea85899a6d4b5c5aebd2566bc44369e42243e..4b8d6c0261180889855a8d57510e8067e0e0e22b 100644 --- a/ets2panda/public/es2panda_lib.idl.erb +++ b/ets2panda/public/es2panda_lib.idl.erb @@ -131,6 +131,7 @@ interface es2panda_SuggestionInfo { attribute sequence args; attribute u32 argc; attribute String substitutionCode; + attribute String title; attribute es2panda_SourceRange range; }; @@ -205,8 +206,9 @@ interface es2panda_Impl { es2panda_SourcePosition SourceRangeEnd(es2panda_Context context, es2panda_SourceRange range); es2panda_DiagnosticInfo CreateDiagnosticInfo(es2panda_Context context, es2panda_DiagnosticKind kind, sequence args, u32 argc, es2panda_SourcePosition position); - es2panda_SuggestionInfo CreateDiagnosticInfo(es2panda_Context context, es2panda_DiagnosticKind kind, - sequence args, u32 argc, String substitutionCode, es2panda_SourceRange range); + es2panda_SuggestionInfo CreateSuggestionInfo(es2panda_Context context, es2panda_DiagnosticKind kind, + sequence args, u32 argc, String substitutionCode, + String message, es2panda_SourceRange range); void LogDiagnosticWithSuggestion(es2panda_Context context, es2panda_DiagnosticInfo diagnosticInfo, es2panda_SuggestionInfo suggestionInfo); void LogTypeError(es2panda_Context context, String errorMsg, es2panda_SourcePosition pos); diff --git a/ets2panda/test/unit/lsp/code_fix/ui_plugin_suggest.cpp b/ets2panda/test/unit/lsp/code_fix/ui_plugin_suggest.cpp index f03f8e4ac5d5375ea5364cf24ffb4e5a8f83517b..6a7dde7fbfc08a45146b9a5a97ff5f7102fbd9e7 100644 --- a/ets2panda/test/unit/lsp/code_fix/ui_plugin_suggest.cpp +++ b/ets2panda/test/unit/lsp/code_fix/ui_plugin_suggest.cpp @@ -60,6 +60,7 @@ TEST_F(LspUISuggestionTests, UIPluginsErrorTest1) const char *dmessage1 = "origin {}"; const size_t argc1 = 1; const char *substitutionCode = "replace b"; + const char *title = "Title:"; const char *dmessage2 = "error"; const size_t argc0 = 0; const size_t index1 = 1; @@ -72,7 +73,8 @@ TEST_F(LspUISuggestionTests, UIPluginsErrorTest1) es2panda_SourcePosition *left = initializer.CreateSourcePosition(ctx, index1, line1); es2panda_SourcePosition *right = initializer.CreateSourcePosition(ctx, index2, line2); es2panda_SourceRange *range = initializer.CreateSourceRange(ctx, left, right); - auto suggestionInfo = initializer.CreateSuggestionInfo(ctx, suggestionkind, params, argc1, substitutionCode, range); + auto suggestionInfo = + initializer.CreateSuggestionInfo(ctx, suggestionkind, params, argc1, substitutionCode, title, range); auto diagnosticInfo = initializer.CreateDiagnosticInfo(ctx, diagnostikind, nullptr, argc0, left); initializer.LogDiagnosticWithSuggestion(ctx, diagnosticInfo, suggestionInfo); auto suggest = lspApi->getSyntacticDiagnostics(ctx); @@ -135,6 +137,7 @@ TEST_F(LspUISuggestionTests, UIPluginsErrorTest3) LSPAPI const *lspApi = GetImpl(); const char *dmessage1 = "origin a"; const char *substitutionCode = "replace b"; + const char *title1 = "Title1:"; const char *dmessage2 = "error"; const size_t argc0 = 0; const size_t index1 = 0; @@ -148,18 +151,19 @@ TEST_F(LspUISuggestionTests, UIPluginsErrorTest3) es2panda_SourcePosition *right = initializer.CreateSourcePosition(ctx, index2, line2); es2panda_SourceRange *range = initializer.CreateSourceRange(ctx, left, right); auto suggestionInfo = - initializer.CreateSuggestionInfo(ctx, suggestionkind, nullptr, argc0, substitutionCode, range); + initializer.CreateSuggestionInfo(ctx, suggestionkind, nullptr, argc0, substitutionCode, title1, range); auto diagnosticInfo = initializer.CreateDiagnosticInfo(ctx, diagnostikind, nullptr, argc0, left); initializer.LogDiagnosticWithSuggestion(ctx, diagnosticInfo, suggestionInfo); const char *substitutionCode2 = "replace c"; + const char *title2 = "Title2:"; auto suggestionkind2 = initializer.CreateDiagnosticKind(ctx, dmessage1, ES2PANDA_PLUGIN_SUGGESTION); auto diagnostikind2 = initializer.CreateDiagnosticKind(ctx, dmessage2, ES2PANDA_PLUGIN_ERROR); es2panda_SourcePosition *left2 = initializer.CreateSourcePosition(ctx, index1, line1); es2panda_SourcePosition *right2 = initializer.CreateSourcePosition(ctx, index2, line2); es2panda_SourceRange *range2 = initializer.CreateSourceRange(ctx, left2, right2); auto suggestionInfo2 = - initializer.CreateSuggestionInfo(ctx, suggestionkind2, nullptr, argc0, substitutionCode2, range2); + initializer.CreateSuggestionInfo(ctx, suggestionkind2, nullptr, argc0, substitutionCode2, title2, range2); auto diagnosticInfo2 = initializer.CreateDiagnosticInfo(ctx, diagnostikind2, nullptr, argc0, left2); initializer.LogDiagnosticWithSuggestion(ctx, diagnosticInfo2, suggestionInfo2); @@ -197,6 +201,7 @@ TEST_F(LspUISuggestionTests, UIPluginsErrorTest4) const char *dmessage1 = "origin {}"; const size_t argc1 = 1; const char *substitutionCode = "replace b"; + const char *title = "Title:"; const char *dmessage2 = "error"; const size_t argc0 = 0; const size_t index1 = 16; // suggestion left @@ -213,7 +218,8 @@ TEST_F(LspUISuggestionTests, UIPluginsErrorTest4) es2panda_SourcePosition *right = initializer.CreateSourcePosition(ctx, index2, line2); es2panda_SourcePosition *diagPos = initializer.CreateSourcePosition(ctx, index3, line3); es2panda_SourceRange *range = initializer.CreateSourceRange(ctx, left, right); - auto suggestionInfo = initializer.CreateSuggestionInfo(ctx, suggestionkind, params, argc1, substitutionCode, range); + auto suggestionInfo = + initializer.CreateSuggestionInfo(ctx, suggestionkind, params, argc1, substitutionCode, title, range); auto diagnosticInfo = initializer.CreateDiagnosticInfo(ctx, diagnostikind, nullptr, argc0, diagPos); initializer.LogDiagnosticWithSuggestion(ctx, diagnosticInfo, suggestionInfo); auto suggest = lspApi->getSyntacticDiagnostics(ctx); diff --git a/ets2panda/test/unit/plugin/plugin_proceed_to_state_log_diagnostic_with_suggestion.cpp b/ets2panda/test/unit/plugin/plugin_proceed_to_state_log_diagnostic_with_suggestion.cpp index a281b97c67a4f26f59e77afaf60ddd2b0f48f9ae..6a43e6c6a23c67136e271d59f568f97fd9d5080d 100644 --- a/ets2panda/test/unit/plugin/plugin_proceed_to_state_log_diagnostic_with_suggestion.cpp +++ b/ets2panda/test/unit/plugin/plugin_proceed_to_state_log_diagnostic_with_suggestion.cpp @@ -59,7 +59,7 @@ int main(int argc, char **argv) es2panda_SourcePosition *right = g_impl->CreateSourcePosition(g_ctx, 7, 0); es2panda_SourceRange *range = g_impl->CreateSourceRange(g_ctx, left, right); - auto suggestionInfo = g_impl->CreateSuggestionInfo(g_ctx, suggestionkind, params, 1, "replace b", range); + auto suggestionInfo = g_impl->CreateSuggestionInfo(g_ctx, suggestionkind, params, 1, "replace b", "Title:", range); auto diagnosticInfo = g_impl->CreateDiagnosticInfo(g_ctx, diagnostikind, nullptr, 0, left); g_impl->LogDiagnosticWithSuggestion(g_ctx, diagnosticInfo, suggestionInfo); @@ -77,9 +77,9 @@ int main(int argc, char **argv) auto diagnostic = reinterpret_cast(&(*(*diagnosticStorage)[0])); auto suggestion = (diagnostic->Suggestion())[0]; if (strcmp(suggestion->SubstitutionCode().data(), "replace b") != 0 || - strcmp(suggestion->Message().data(), "origin a") != 0 || suggestion->SourceRange()->start.line != startLine || - suggestion->SourceRange()->end.line != endLine || suggestion->SourceRange()->start.index != startIndex || - suggestion->SourceRange()->end.index != endIndex) { + strcmp(suggestion->Title().data(), "Title:") != 0 || strcmp(suggestion->Message().data(), "origin a") != 0 || + suggestion->SourceRange()->start.line != startLine || suggestion->SourceRange()->end.line != endLine || + suggestion->SourceRange()->start.index != startIndex || suggestion->SourceRange()->end.index != endIndex) { return TEST_ERROR_CODE; } diff --git a/ets2panda/util/diagnostic.cpp b/ets2panda/util/diagnostic.cpp index 4ca94c5c81dfbf2c42beff1ea36be3794247ed42..1f3f8e079072085e18157f76b227b7c711db97f1 100644 --- a/ets2panda/util/diagnostic.cpp +++ b/ets2panda/util/diagnostic.cpp @@ -227,8 +227,12 @@ ThrowableDiagnostic::ThrowableDiagnostic(const DiagnosticType type, const diagno } Suggestion::Suggestion(const diagnostic::DiagnosticKind *kind, std::vector ¶ms, - const char *substitutionCode, const lexer::SourceRange *range) - : kind_(kind), substitutionCode_(substitutionCode), message_(Format(kind->Message(), params)), range_(range) + const char *substitutionCode, const char *title, const lexer::SourceRange *range) + : kind_(kind), + substitutionCode_(substitutionCode), + title_(title), + message_(Format(kind->Message(), params)), + range_(range) { } diff --git a/ets2panda/util/diagnostic.h b/ets2panda/util/diagnostic.h index 3c82dc536ab2faccd4a5359c1f2c7db4387a9764..fafbd060751628dfc277531c464eee7ea21cbd46 100644 --- a/ets2panda/util/diagnostic.h +++ b/ets2panda/util/diagnostic.h @@ -180,7 +180,7 @@ private: class Suggestion : public DiagnosticBase { public: explicit Suggestion(const diagnostic::DiagnosticKind *kind, std::vector ¶ms, - const char *substitutionCode, const lexer::SourceRange *range); + const char *substitutionCode, const char *title, const lexer::SourceRange *range); const lexer::SourceRange *SourceRange() const { @@ -192,6 +192,11 @@ public: return substitutionCode_; } + std::string Title() const + { + return title_; + } + std::string Message() const override { return message_; @@ -204,6 +209,7 @@ public: private: const diagnostic::DiagnosticKind *kind_; const std::string substitutionCode_; + const std::string title_; const std::string message_; const lexer::SourceRange *range_; };