mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-25 15:26:17 +02:00
getSnippetUpTo: Return optional
This makes it possible to certain discern failures from empty snippets, which I think is an ok review comment. Maybe it should do so for swapped column indexes too, but I'm not sure. I don't think it matters in the grand scheme. We don't even have a real use case for `nullopt` now anyway. Since we don't have a use case, I'm not applying this logic to higher level functions yet.
This commit is contained in:
parent
03d33703ef
commit
61a4d3d45c
4 changed files with 10 additions and 8 deletions
|
@ -646,7 +646,7 @@ size_t SymbolTable::totalSize() const
|
||||||
std::string DocComment::getInnerText(const PosTable & positions) const {
|
std::string DocComment::getInnerText(const PosTable & positions) const {
|
||||||
auto beginPos = positions[begin];
|
auto beginPos = positions[begin];
|
||||||
auto endPos = positions[end];
|
auto endPos = positions[end];
|
||||||
auto docCommentStr = beginPos.getSnippetUpTo(endPos);
|
auto docCommentStr = beginPos.getSnippetUpTo(endPos).value_or("");
|
||||||
|
|
||||||
// Strip "/**" and "*/"
|
// Strip "/**" and "*/"
|
||||||
constexpr size_t prefixLen = 3;
|
constexpr size_t prefixLen = 3;
|
||||||
|
|
|
@ -110,11 +110,11 @@ void Pos::LinesIterator::bump(bool atFirst)
|
||||||
input.remove_prefix(eol);
|
input.remove_prefix(eol);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Pos::getSnippetUpTo(const Pos & end) const {
|
std::optional<std::string> Pos::getSnippetUpTo(const Pos & end) const {
|
||||||
assert(this->origin == end.origin);
|
assert(this->origin == end.origin);
|
||||||
|
|
||||||
if (end.line < this->line)
|
if (end.line < this->line)
|
||||||
return "";
|
return std::nullopt;
|
||||||
|
|
||||||
if (auto source = getSource()) {
|
if (auto source = getSource()) {
|
||||||
|
|
||||||
|
@ -152,7 +152,7 @@ std::string Pos::getSnippetUpTo(const Pos & end) const {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return "";
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ struct Pos
|
||||||
bool operator==(const Pos & rhs) const = default;
|
bool operator==(const Pos & rhs) const = default;
|
||||||
auto operator<=>(const Pos & rhs) const = default;
|
auto operator<=>(const Pos & rhs) const = default;
|
||||||
|
|
||||||
std::string getSnippetUpTo(const Pos & end) const;
|
std::optional<std::string> getSnippetUpTo(const Pos & end) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the SourcePath, if the source was loaded from a file.
|
* Get the SourcePath, if the source was loaded from a file.
|
||||||
|
|
|
@ -25,7 +25,7 @@ TEST(Position, getSnippetUpTo_1)
|
||||||
ASSERT_EQ(start.getSnippetUpTo(start), "");
|
ASSERT_EQ(start.getSnippetUpTo(start), "");
|
||||||
ASSERT_EQ(start.getSnippetUpTo(end), "x");
|
ASSERT_EQ(start.getSnippetUpTo(end), "x");
|
||||||
ASSERT_EQ(end.getSnippetUpTo(end), "");
|
ASSERT_EQ(end.getSnippetUpTo(end), "");
|
||||||
ASSERT_EQ(end.getSnippetUpTo(start), "");
|
ASSERT_EQ(end.getSnippetUpTo(start), std::nullopt);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
// NOTE: line and column are actually 1-based indexes
|
// NOTE: line and column are actually 1-based indexes
|
||||||
|
@ -37,7 +37,7 @@ TEST(Position, getSnippetUpTo_1)
|
||||||
ASSERT_EQ(start.getSnippetUpTo(end), "");
|
ASSERT_EQ(start.getSnippetUpTo(end), "");
|
||||||
|
|
||||||
ASSERT_EQ(end.getSnippetUpTo(end), "");
|
ASSERT_EQ(end.getSnippetUpTo(end), "");
|
||||||
ASSERT_EQ(end.getSnippetUpTo(start), "");
|
ASSERT_EQ(end.getSnippetUpTo(start), std::nullopt);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
Pos start(1, 1, o);
|
Pos start(1, 1, o);
|
||||||
|
@ -53,7 +53,7 @@ TEST(Position, getSnippetUpTo_1)
|
||||||
ASSERT_EQ(start.getSnippetUpTo(start), "");
|
ASSERT_EQ(start.getSnippetUpTo(start), "");
|
||||||
ASSERT_EQ(start.getSnippetUpTo(end), "x");
|
ASSERT_EQ(start.getSnippetUpTo(end), "x");
|
||||||
ASSERT_EQ(end.getSnippetUpTo(end), "");
|
ASSERT_EQ(end.getSnippetUpTo(end), "");
|
||||||
ASSERT_EQ(end.getSnippetUpTo(start), "");
|
ASSERT_EQ(end.getSnippetUpTo(start), std::nullopt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TEST(Position, getSnippetUpTo_2)
|
TEST(Position, getSnippetUpTo_2)
|
||||||
|
@ -65,6 +65,8 @@ TEST(Position, getSnippetUpTo_2)
|
||||||
ASSERT_EQ(start.getSnippetUpTo(start), "");
|
ASSERT_EQ(start.getSnippetUpTo(start), "");
|
||||||
ASSERT_EQ(start.getSnippetUpTo(end), "a");
|
ASSERT_EQ(start.getSnippetUpTo(end), "a");
|
||||||
ASSERT_EQ(end.getSnippetUpTo(end), "");
|
ASSERT_EQ(end.getSnippetUpTo(end), "");
|
||||||
|
|
||||||
|
// nullopt? I feel like changing the column handling would just make it more fragile
|
||||||
ASSERT_EQ(end.getSnippetUpTo(start), "");
|
ASSERT_EQ(end.getSnippetUpTo(start), "");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue