forked from qt-creator/qt-creator
ClangCodeModel: Request clangd quickfix for -Wswitch warning
This way, a warning about missing switch cases will be accompanied by a matching code action, which allows the user to fix it right away by clicking on the lightbulb. Requires clangd >= 15; see https://reviews.llvm.org/D118976. Change-Id: I11e82264c41e4154f979d28a5e44e72c8158595b Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -866,7 +866,19 @@ SymbolSupport &Client::symbolSupport()
|
||||
return m_symbolSupport;
|
||||
}
|
||||
|
||||
void Client::requestCodeActions(const LanguageServerProtocol::DocumentUri &uri,
|
||||
const LanguageServerProtocol::Diagnostic &diagnostic)
|
||||
{
|
||||
requestCodeActions(uri, diagnostic.range(), {diagnostic});
|
||||
}
|
||||
|
||||
void Client::requestCodeActions(const DocumentUri &uri, const QList<Diagnostic> &diagnostics)
|
||||
{
|
||||
requestCodeActions(uri, {}, diagnostics);
|
||||
}
|
||||
|
||||
void Client::requestCodeActions(const DocumentUri &uri, const Range &range,
|
||||
const QList<Diagnostic> &diagnostics)
|
||||
{
|
||||
const Utils::FilePath fileName = uri.toFilePath();
|
||||
TextEditor::TextDocument *doc = TextEditor::TextDocument::textDocumentForFilePath(fileName);
|
||||
@@ -878,10 +890,14 @@ void Client::requestCodeActions(const DocumentUri &uri, const QList<Diagnostic>
|
||||
context.setDiagnostics(diagnostics);
|
||||
codeActionParams.setContext(context);
|
||||
codeActionParams.setTextDocument(TextDocumentIdentifier(uri));
|
||||
Position start(0, 0);
|
||||
const QTextBlock &lastBlock = doc->document()->lastBlock();
|
||||
Position end(lastBlock.blockNumber(), lastBlock.length() - 1);
|
||||
codeActionParams.setRange(Range(start, end));
|
||||
if (range.isEmpty()) {
|
||||
Position start(0, 0);
|
||||
const QTextBlock &lastBlock = doc->document()->lastBlock();
|
||||
Position end(lastBlock.blockNumber(), lastBlock.length() - 1);
|
||||
codeActionParams.setRange(Range(start, end));
|
||||
} else {
|
||||
codeActionParams.setRange(range);
|
||||
}
|
||||
CodeActionRequest request(codeActionParams);
|
||||
request.setResponseCallback(
|
||||
[uri, self = QPointer<Client>(this)](const CodeActionRequest::Response &response) {
|
||||
|
||||
Reference in New Issue
Block a user