15 return u
"QmlRenameSymbolSupport"_s;
19 const QLspSpecification::InitializeParams &,
20 QLspSpecification::InitializeResult &serverCapabilities)
25 serverCapabilities.capabilities.renameProvider =
true;
35 QLspSpecification::WorkspaceEdit
result;
47 if (!expressionType) {
55 auto &editsByFileForResult =
result.documentChanges.emplace();
59 QMap<QUrl, QList<QLspSpecification::TextEdit>> editsByFileUris;
65 QHash<QString, QString> codeCache;
67 for (
const auto &rename : renames) {
68 QLspSpecification::TextEdit
edit;
72 auto cacheEntry = codeCache.find(rename.location.filename);
73 if (cacheEntry == codeCache.end()) {
74 auto file =
files.key(rename.location.filename)
75 .field(QQmlJS::Dom::Fields::currentItem)
78 qDebug() <<
"File" << rename.location.filename
79 <<
"not found in DOM! Available files are" <<
files.keys();
82 cacheEntry = codeCache.insert(rename.location.filename,
file->code());
86 rename.location.sourceLocation);
87 edit.newText = rename.replacement.toUtf8();
89 editsByFileUris[uri].append(
edit);
92 for (
auto it = editsByFileUris.keyValueBegin();
it != editsByFileUris.keyValueEnd(); ++
it) {
93 QLspSpecification::TextDocumentEdit editsForCurrentFile;
94 editsForCurrentFile.textDocument.uri =
it->first.toEncoded();
101 for (
const auto &
x : std::as_const(
it->second)) {
102 editsForCurrentFile.edits.append(
x);
104 editsByFileForResult.append(editsForCurrentFile);
Implements a server for the language server protocol.
DomItem field(QStringView name) const
A QmlFile, when loaded in a DomEnvironment that has the DomCreationOption::WithSemanticAnalysis,...
static std::optional< QQmlLSUtilsErrorMessage > checkNameForRename(const DomItem &item, const QString &newName, const std::optional< QQmlLSUtilsExpressionType > &targetType=std::nullopt)
static std::optional< QQmlLSUtilsExpressionType > resolveExpressionType(const DomItem &item, QQmlLSUtilsResolveOptions)
static QLspSpecification::Range qmlLocationToLspLocation(const QString &code, QQmlJS::SourceLocation qmlLocation)
Converts a QQmlJS::SourceLocation to a LSP Range.
static QList< QQmlLSUtilsEdit > renameUsagesOf(const DomItem &item, const QString &newName, const std::optional< QQmlLSUtilsExpressionType > &targetType=std::nullopt)
Rename the appearance of item to newName.
void setupCapabilities(const QLspSpecification::InitializeParams &clientInfo, QLspSpecification::InitializeResult &) override
void process(RequestPointerArgument request) override
void registerHandlers(QLanguageServer *server, QLanguageServerProtocol *protocol) override
QQmlRenameSymbolSupport(QmlLsp::QQmlCodeModel *codeModel)
QString name() const override
\macro QT_RESTRICTED_CAST_FROM_ASCII
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
static QUrl fromLocalFile(const QString &localfile)
Returns a QUrl representation of localFile, interpreted as a local file.
QSet< QString >::iterator it
Combined button and popup list for selecting options.
GLint GLint GLint GLint GLint x
[0]
QSqlQueryModel * model
[16]
QNetworkRequest request(url)
decltype(auto) getRequestHandler()
std::variant< QList< QQmlLSUtilsItemLocation >, QQmlLSUtilsErrorMessage > itemsForRequest(const RequestPointer &request)
RequestPointer && RequestPointerArgument
QQmlJS::Dom::DomItem domItem
This class sends a result or an error when going out of scope.
void setError(const QQmlLSUtilsErrorMessage &error)
bool setErrorFrom(const std::variant< T... > &variant)