[SourceKit/CursorInfo] Include line and column in result

Add line/column in addition to offset so clients need not map it
themselves.
This commit is contained in:
Ben Barham
2021-04-14 14:21:40 +10:00
parent 828d12764c
commit f773e980ce
7 changed files with 119 additions and 94 deletions

View File

@@ -96,7 +96,8 @@ struct TestCursorInfo {
std::string Name;
std::string Typename;
std::string Filename;
Optional<std::pair<unsigned, unsigned>> DeclarationLoc;
unsigned Offset;
unsigned Length;
};
class CursorInfoTest : public ::testing::Test {
@@ -162,8 +163,9 @@ public:
const CursorSymbolInfo &MainSymbol = Info.Symbols[0];
TestInfo.Name = std::string(MainSymbol.Name.str());
TestInfo.Typename = MainSymbol.TypeName.str();
TestInfo.Filename = MainSymbol.Filename.str();
TestInfo.DeclarationLoc = MainSymbol.DeclarationLoc;
TestInfo.Filename = MainSymbol.Location.Filename.str();
TestInfo.Offset = MainSymbol.Location.Offset;
TestInfo.Length = MainSymbol.Location.Length;
}
sema.signal();
});
@@ -223,9 +225,8 @@ TEST_F(CursorInfoTest, EditAfter) {
EXPECT_STREQ("foo", Info.Name.c_str());
EXPECT_STREQ("Int", Info.Typename.c_str());
EXPECT_STREQ(DocName, Info.Filename.c_str());
ASSERT_TRUE(Info.DeclarationLoc.hasValue());
EXPECT_EQ(FooOffs, Info.DeclarationLoc->first);
EXPECT_EQ(strlen("foo"), Info.DeclarationLoc->second);
EXPECT_EQ(FooOffs, Info.Offset);
EXPECT_EQ(strlen("foo"), Info.Length);
StringRef TextToReplace = "0";
replaceText(DocName, findOffset(TextToReplace, Contents), TextToReplace.size(),
@@ -239,9 +240,8 @@ TEST_F(CursorInfoTest, EditAfter) {
EXPECT_STREQ("foo", Info.Name.c_str());
EXPECT_STREQ("Int", Info.Typename.c_str());
EXPECT_STREQ(DocName, Info.Filename.c_str());
ASSERT_TRUE(Info.DeclarationLoc.hasValue());
EXPECT_EQ(FooOffs, Info.DeclarationLoc->first);
EXPECT_EQ(strlen("foo"), Info.DeclarationLoc->second);
EXPECT_EQ(FooOffs, Info.Offset);
EXPECT_EQ(strlen("foo"), Info.Length);
}
TEST_F(CursorInfoTest, EditBefore) {
@@ -258,9 +258,8 @@ TEST_F(CursorInfoTest, EditBefore) {
EXPECT_STREQ("foo", Info.Name.c_str());
EXPECT_STREQ("Int", Info.Typename.c_str());
EXPECT_STREQ(DocName, Info.Filename.c_str());
ASSERT_TRUE(Info.DeclarationLoc.hasValue());
EXPECT_EQ(FooOffs, Info.DeclarationLoc->first);
EXPECT_EQ(strlen("foo"), Info.DeclarationLoc->second);
EXPECT_EQ(FooOffs, Info.Offset);
EXPECT_EQ(strlen("foo"), Info.Length);
StringRef TextToReplace = "0";
replaceText(DocName, findOffset(TextToReplace, Contents), TextToReplace.size(),
@@ -276,9 +275,8 @@ TEST_F(CursorInfoTest, EditBefore) {
EXPECT_STREQ("foo", Info.Name.c_str());
EXPECT_STREQ("Int", Info.Typename.c_str());
EXPECT_STREQ(DocName, Info.Filename.c_str());
ASSERT_TRUE(Info.DeclarationLoc.hasValue());
EXPECT_EQ(FooOffs, Info.DeclarationLoc->first);
EXPECT_EQ(strlen("foo"), Info.DeclarationLoc->second);
EXPECT_EQ(FooOffs, Info.Offset);
EXPECT_EQ(strlen("foo"), Info.Length);
}
TEST_F(CursorInfoTest, CursorInfoMustWaitDueDeclLoc) {
@@ -306,9 +304,8 @@ TEST_F(CursorInfoTest, CursorInfoMustWaitDueDeclLoc) {
Info = getCursor(DocName, FooRefOffs, Args);
EXPECT_STREQ("foo", Info.Name.c_str());
EXPECT_STREQ("[Int : Int]", Info.Typename.c_str());
ASSERT_TRUE(Info.DeclarationLoc.hasValue());
EXPECT_EQ(FooOffs, Info.DeclarationLoc->first);
EXPECT_EQ(strlen("foo"), Info.DeclarationLoc->second);
EXPECT_EQ(FooOffs, Info.Offset);
EXPECT_EQ(strlen("foo"), Info.Length);
}
TEST_F(CursorInfoTest, CursorInfoMustWaitDueOffset) {
@@ -336,9 +333,8 @@ TEST_F(CursorInfoTest, CursorInfoMustWaitDueOffset) {
Info = getCursor(DocName, FooRefOffs, Args);
EXPECT_STREQ("foo", Info.Name.c_str());
EXPECT_STREQ("[Int : Int]", Info.Typename.c_str());
ASSERT_TRUE(Info.DeclarationLoc.hasValue());
EXPECT_EQ(FooOffs, Info.DeclarationLoc->first);
EXPECT_EQ(strlen("foo"), Info.DeclarationLoc->second);
EXPECT_EQ(FooOffs, Info.Offset);
EXPECT_EQ(strlen("foo"), Info.Length);
}
TEST_F(CursorInfoTest, CursorInfoMustWaitDueToken) {
@@ -367,9 +363,8 @@ TEST_F(CursorInfoTest, CursorInfoMustWaitDueToken) {
Info = getCursor(DocName, FooRefOffs, Args);
EXPECT_STREQ("fog", Info.Name.c_str());
EXPECT_STREQ("[Int : Int]", Info.Typename.c_str());
ASSERT_TRUE(Info.DeclarationLoc.hasValue());
EXPECT_EQ(FooOffs, Info.DeclarationLoc->first);
EXPECT_EQ(strlen("fog"), Info.DeclarationLoc->second);
EXPECT_EQ(FooOffs, Info.Offset);
EXPECT_EQ(strlen("fog"), Info.Length);
}
TEST_F(CursorInfoTest, CursorInfoMustWaitDueTokenRace) {
@@ -396,7 +391,6 @@ TEST_F(CursorInfoTest, CursorInfoMustWaitDueTokenRace) {
auto Info = getCursor(DocName, FooRefOffs, Args);
EXPECT_STREQ("fog", Info.Name.c_str());
EXPECT_STREQ("Int", Info.Typename.c_str());
ASSERT_TRUE(Info.DeclarationLoc.hasValue());
EXPECT_EQ(FooOffs, Info.DeclarationLoc->first);
EXPECT_EQ(strlen("fog"), Info.DeclarationLoc->second);
EXPECT_EQ(FooOffs, Info.Offset);
EXPECT_EQ(strlen("fog"), Info.Length);
}