qmlls/qmllintsuggestions: Fix wrong fix suggestion offsets
When porting to code to use the logger data directly I failed to account for the zero-indexed lines and characters used in the LSP. Fixed and improved the test to ensure this regression doesn't happen again. Change-Id: I2a16896a49b38b9e5365d6f70aab3ec285d41d48 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Fawzi Mohamed <fawzi.mohamed@qt.io>
This commit is contained in:
parent
756b54bd83
commit
19e74bd085
|
@ -191,9 +191,23 @@ void tst_Qmlls::didOpenTextDocument()
|
||||||
|
|
||||||
auto list = std::get<ListType>(response);
|
auto list = std::get<ListType>(response);
|
||||||
|
|
||||||
QList<QPair<QString, QString>> expectedData = {
|
struct ReplacementData
|
||||||
{ QLatin1StringView("Did you mean \"width\"?"), QLatin1StringView("width") },
|
{
|
||||||
{ QLatin1StringView("Did you mean \"z\"?"), QLatin1StringView("z") }
|
QString replacement;
|
||||||
|
Range range;
|
||||||
|
};
|
||||||
|
|
||||||
|
QHash<QString, ReplacementData> expectedData = {
|
||||||
|
{ QLatin1StringView("Did you mean \"width\"?"),
|
||||||
|
{ QLatin1StringView("width"),
|
||||||
|
Range { Position { 3, 4 }, Position { 3, 10 } } } },
|
||||||
|
{ QLatin1StringView("Did you mean \"z\"?"),
|
||||||
|
{ QLatin1StringView("z"),
|
||||||
|
Range { Position {
|
||||||
|
3,
|
||||||
|
12,
|
||||||
|
},
|
||||||
|
Position { 3, 15 } } } }
|
||||||
};
|
};
|
||||||
QCOMPARE(list.size(), expectedData.size());
|
QCOMPARE(list.size(), expectedData.size());
|
||||||
|
|
||||||
|
@ -222,14 +236,18 @@ void tst_Qmlls::didOpenTextDocument()
|
||||||
QVERIFY(std::holds_alternative<TextEdit>(editVariant));
|
QVERIFY(std::holds_alternative<TextEdit>(editVariant));
|
||||||
|
|
||||||
TextEdit textEdit = std::get<TextEdit>(editVariant);
|
TextEdit textEdit = std::get<TextEdit>(editVariant);
|
||||||
QString newText = QString::fromUtf8(textEdit.newText);
|
QString replacement = QString::fromUtf8(textEdit.newText);
|
||||||
QPair<QString, QString> data = { title, newText };
|
const Range &range = textEdit.range;
|
||||||
|
|
||||||
qsizetype dataIndex = expectedData.indexOf(data);
|
QVERIFY2(expectedData.contains(title),
|
||||||
QVERIFY2(dataIndex != -1,
|
qPrintable(QLatin1String("Unexpected fix \"%1\"").arg(title)));
|
||||||
qPrintable(QLatin1String("{\"%1\",\"%2\"}").arg(title, newText)));
|
QCOMPARE(replacement, expectedData[title].replacement);
|
||||||
|
QCOMPARE(range.start.line, expectedData[title].range.start.line);
|
||||||
|
QCOMPARE(range.start.character, expectedData[title].range.start.character);
|
||||||
|
QCOMPARE(range.end.line, expectedData[title].range.end.line);
|
||||||
|
QCOMPARE(range.end.character, expectedData[title].range.end.character);
|
||||||
// Make sure every expected entry only occurs once
|
// Make sure every expected entry only occurs once
|
||||||
expectedData.remove(dataIndex);
|
expectedData.remove(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
success = true;
|
success = true;
|
||||||
|
|
|
@ -221,8 +221,8 @@ void QmlLintSuggestions::diagnose(const QByteArray &uri)
|
||||||
for (const FixSuggestion::Fix &fix : suggestion->fixes) {
|
for (const FixSuggestion::Fix &fix : suggestion->fixes) {
|
||||||
QQmlJS::SourceLocation cut = fix.cutLocation;
|
QQmlJS::SourceLocation cut = fix.cutLocation;
|
||||||
|
|
||||||
int line = cut.isValid() ? cut.startLine : 0;
|
int line = cut.isValid() ? cut.startLine - 1 : 0;
|
||||||
int column = cut.isValid() ? cut.startColumn : 0;
|
int column = cut.isValid() ? cut.startColumn - 1 : 0;
|
||||||
|
|
||||||
QJsonObject object;
|
QJsonObject object;
|
||||||
object[u"lspBeginLine"] = line;
|
object[u"lspBeginLine"] = line;
|
||||||
|
@ -230,8 +230,8 @@ void QmlLintSuggestions::diagnose(const QByteArray &uri)
|
||||||
|
|
||||||
Position end = { line, column };
|
Position end = { line, column };
|
||||||
|
|
||||||
addLength(end, srcLoc.isValid() ? srcLoc.offset : 0,
|
addLength(end, srcLoc.isValid() ? cut.offset : 0,
|
||||||
srcLoc.isValid() ? srcLoc.length : 0);
|
srcLoc.isValid() ? cut.length : 0);
|
||||||
object[u"lspEndLine"] = end.line;
|
object[u"lspEndLine"] = end.line;
|
||||||
object[u"lspEndCharacter"] = end.character;
|
object[u"lspEndCharacter"] = end.character;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue