diff --git a/src/clang_cursor.cc b/src/clang_cursor.cc index 097f473e2..7be73be17 100644 --- a/src/clang_cursor.cc +++ b/src/clang_cursor.cc @@ -232,7 +232,7 @@ std::string ClangCursor::get_type_description() const { return ::ToString(clang_getTypeSpelling(type)); } -NtString ClangCursor::get_comments() const { +std::string ClangCursor::get_comments() const { CXSourceRange range = clang_Cursor_getCommentRange(cx_cursor); if (clang_Range_isNull(range)) return {}; @@ -290,7 +290,7 @@ NtString ClangCursor::get_comments() const { ret.pop_back(); if (ret.empty()) return {}; - return static_cast(ret); + return ret; } std::string ClangCursor::ToString() const { diff --git a/src/clang_cursor.h b/src/clang_cursor.h index 7b53b2758..a89caf4ef 100644 --- a/src/clang_cursor.h +++ b/src/clang_cursor.h @@ -1,6 +1,5 @@ #pragma once -#include "nt_string.h" #include "position.h" #include @@ -86,7 +85,7 @@ class ClangCursor { bool is_valid_kind() const; std::string get_type_description() const; - NtString get_comments() const; + std::string get_comments() const; std::string ToString() const; diff --git a/src/indexer.h b/src/indexer.h index d72afbefd..5f19f971d 100644 --- a/src/indexer.h +++ b/src/indexer.h @@ -9,7 +9,6 @@ #include "language.h" #include "lsp.h" #include "maybe.h" -#include "nt_string.h" #include "performance.h" #include "position.h" #include "project.h" @@ -147,8 +146,8 @@ template struct TypeDefDefinitionData { // General metadata. std::string detailed_name; - NtString hover; - NtString comments; + std::string hover; + std::string comments; // While a class/type can technically have a separate declaration/definition, // it doesn't really happen in practice. The declaration never contains @@ -246,8 +245,8 @@ template struct FuncDefDefinitionData { // General metadata. std::string detailed_name; - NtString hover; - NtString comments; + std::string hover; + std::string comments; Maybe spell; Maybe extent; @@ -351,8 +350,8 @@ template struct VarDefDefinitionData { // General metadata. std::string detailed_name; - NtString hover; - NtString comments; + std::string hover; + std::string comments; // TODO: definitions should be a list of ranges, since there can be more // than one - when?? Maybe spell; diff --git a/src/messages/cquery_member_hierarchy.cc b/src/messages/cquery_member_hierarchy.cc index c28fda8bc..78e23a0b0 100644 --- a/src/messages/cquery_member_hierarchy.cc +++ b/src/messages/cquery_member_hierarchy.cc @@ -35,7 +35,7 @@ struct Out_CqueryMemberHierarchy : public lsOutMessage { struct Entry { QueryTypeId id; - std::string_view name; + std::string name; std::string fieldName; lsLocation location; // For unexpanded nodes, this is an upper bound because some entities may be @@ -110,7 +110,7 @@ bool Expand(MessageHandler* m, if (detailed_name) entry->name = def->detailed_name; else - entry->name = def->ShortName(); + entry->name = def->ShortName().to_string(); std::unordered_set seen; if (levels > 0) { std::vector stack; @@ -177,7 +177,7 @@ struct Handler_CqueryMemberHierarchy Out_CqueryMemberHierarchy::Entry entry; // Not type, |id| is invalid. if (detailed_name) - entry.name = def->DetailedName(false); + entry.name = def->DetailedName(false).to_string(); else entry.name = std::string(def->ShortName()); if (def->spell) { diff --git a/src/nt_string.h b/src/nt_string.h deleted file mode 100644 index 4083535ef..000000000 --- a/src/nt_string.h +++ /dev/null @@ -1,43 +0,0 @@ -#pragma once - -#include - -#include -#include -#include -#include - -// Nullable null-terminated string, which is null if default constructed, -// but non-null if assigned. -// This is used in Query{Func,Type,Var}::def to reduce memory footprint. -class NtString { - using size_type = std::string::size_type; - std::unique_ptr str; - - public: - NtString() = default; - NtString(NtString&& o) = default; - NtString(const NtString& o) { *this = o; } - NtString(std::string_view sv) { *this = sv; } - - const char* c_str() const { return str.get(); } - operator std::string_view() const { - if (c_str()) - return c_str(); - return {}; - } - bool empty() const { return !str || *c_str() == '\0'; } - - void operator=(std::string_view sv) { - str = std::unique_ptr(new char[sv.size() + 1]); - memcpy(str.get(), sv.data(), sv.size()); - str.get()[sv.size()] = '\0'; - } - void operator=(const NtString& o) { - *this = static_cast(o); - } - bool operator==(const NtString& o) const { - return str && o.str ? strcmp(c_str(), o.c_str()) == 0 - : c_str() == o.c_str(); - } -}; diff --git a/src/serializer.cc b/src/serializer.cc index a2df7abbf..c1a8b4dd6 100644 --- a/src/serializer.cc +++ b/src/serializer.cc @@ -132,16 +132,6 @@ void Reflect(Writer& visitor, std::string_view& data) { visitor.String(&data[0], (rapidjson::SizeType)data.size()); } -void Reflect(Reader& visitor, NtString& value) { - if (!visitor.IsString()) - throw std::invalid_argument("std::string"); - value = visitor.GetString(); -} -void Reflect(Writer& visitor, NtString& value) { - const char* s = value.c_str(); - visitor.String(s ? s : ""); -} - void Reflect(Reader& visitor, JsonNull& value) { visitor.GetNull(); } diff --git a/src/serializer.h b/src/serializer.h index 3378d5f61..8f54b28ff 100644 --- a/src/serializer.h +++ b/src/serializer.h @@ -1,7 +1,6 @@ #pragma once #include "maybe.h" -#include "nt_string.h" #include "port.h" #include @@ -179,9 +178,6 @@ void Reflect(Writer& visitor, std::string& value); void Reflect(Reader& visitor, std::string_view& view); void Reflect(Writer& visitor, std::string_view& view); -void Reflect(Reader& visitor, NtString& value); -void Reflect(Writer& visitor, NtString& value); - void Reflect(Reader& visitor, JsonNull& value); void Reflect(Writer& visitor, JsonNull& value);