| 857 | } |
| 858 | |
| 859 | static LSPCompletionList parseDocumentCompletion( const json& result ) { |
| 860 | LSPCompletionList ret; |
| 861 | if ( result.empty() ) |
| 862 | return {}; |
| 863 | #ifndef EE_DEBUG |
| 864 | try { |
| 865 | #endif |
| 866 | ret.isIncomplete = |
| 867 | result.contains( "isIncomplete" ) ? result["isIncomplete"].get<bool>() : false; |
| 868 | const json& items = |
| 869 | ( result.is_object() && result.contains( "items" ) ) ? result["items"] : result; |
| 870 | |
| 871 | for ( const auto& item : items ) { |
| 872 | auto label = jsonString( item, MEMBER_LABEL, "" ); |
| 873 | auto detail = jsonString( item, MEMBER_DETAIL, "" ); |
| 874 | LSPMarkupContent doc = item.contains( MEMBER_DOCUMENTATION ) |
| 875 | ? parseMarkupContent( item.at( MEMBER_DOCUMENTATION ) ) |
| 876 | : LSPMarkupContent{}; |
| 877 | auto filterText = jsonString( item, "filterText", label ); |
| 878 | auto insertText = jsonString( item, "insertText", label ); |
| 879 | auto sortText = jsonString( item, "sortText", label ); |
| 880 | LSPTextEdit textEdit; |
| 881 | if ( item.contains( "textEdit" ) && !item["textEdit"].is_null() ) |
| 882 | textEdit = parseTextEdit( item["textEdit"] ); |
| 883 | auto kind = static_cast<LSPCompletionItemKind>( item.value( MEMBER_KIND, 1 ) ); |
| 884 | const std::vector<LSPTextEdit> additionalTextEdits = |
| 885 | item.contains( "additionalTextEdits" ) |
| 886 | ? parseTextEditArray( item.at( "additionalTextEdits" ) ) |
| 887 | : std::vector<LSPTextEdit>{}; |
| 888 | |
| 889 | ret.items.push_back( { label, kind, detail, doc, sortText, insertText, filterText, |
| 890 | textEdit, additionalTextEdits } ); |
| 891 | } |
| 892 | #ifndef EE_DEBUG |
| 893 | } catch ( const json::exception& err ) { |
| 894 | Log::debug( "Error parsing parseDocumentCompletion: %s", err.what() ); |
| 895 | } |
| 896 | #endif |
| 897 | return ret; |
| 898 | } |
| 899 | |
| 900 | static LSPSignatureInformation parseSignatureInformation( const json& json ) { |
| 901 | LSPSignatureInformation info; |
no test coverage detected