diff --git a/LLMClientInterface.cpp b/LLMClientInterface.cpp index ff19d09..a37715b 100644 --- a/LLMClientInterface.cpp +++ b/LLMClientInterface.cpp @@ -29,6 +29,7 @@ #include "CodeHandler.hpp" #include "context/ContextManager.hpp" #include "context/DocumentContextReader.hpp" +#include "context/Utils.hpp" #include "llmcore/PromptTemplateManager.hpp" #include "llmcore/ProvidersManager.hpp" #include "logger/Logger.hpp" @@ -37,14 +38,6 @@ namespace QodeAssist { -QString extractFilePathFromRequest(const QJsonObject &request) -{ - QJsonObject params = request["params"].toObject(); - QJsonObject doc = params["doc"].toObject(); - QString uri = doc["uri"].toString(); - return QUrl(uri).toLocalFile(); -} - LLMClientInterface::LLMClientInterface( const Settings::GeneralSettings &generalSettings, const Settings::CodeCompletionSettings &completeSettings) @@ -263,20 +256,20 @@ LLMCore::ContextData LLMClientInterface::prepareContext( QJsonObject doc = params["doc"].toObject(); QJsonObject position = doc["position"].toObject(); - Utils::FilePath filePath = Utils::FilePath::fromString(extractFilePathFromRequest(request)); + auto filePath = Context::extractFilePathFromRequest(request); TextEditor::TextDocument *textDocument = TextEditor::TextDocument::textDocumentForFilePath( - filePath); + Utils::FilePath::fromString(filePath)); if (!textDocument) { - LOG_MESSAGE("Error: Document is not available for" + filePath.toString()); + LOG_MESSAGE("Error: Document is not available for" + filePath); return LLMCore::ContextData{}; } int cursorPosition = position["character"].toInt(); int lineNumber = position["line"].toInt(); - Context::DocumentContextReader reader( - textDocument->document(), textDocument->mimeType(), textDocument->filePath().toString()); + Context::DocumentContextReader + reader(textDocument->document(), textDocument->mimeType(), filePath); return reader.prepareContext(lineNumber, cursorPosition, m_completeSettings); } @@ -306,7 +299,7 @@ void LLMClientInterface::sendCompletionToClient( QString processedCompletion = promptTemplate->type() == LLMCore::TemplateType::Chat && m_completeSettings.smartProcessInstuctText() - ? CodeHandler::processText(completion, extractFilePathFromRequest(request)) + ? CodeHandler::processText(completion, Context::extractFilePathFromRequest(request)) : completion; completionItem[LanguageServerProtocol::textKey] = processedCompletion; diff --git a/context/ContextManager.cpp b/context/ContextManager.cpp index 0e94b94..f4ccd88 100644 --- a/context/ContextManager.cpp +++ b/context/ContextManager.cpp @@ -26,6 +26,7 @@ #include "GeneralSettings.hpp" #include "Logger.hpp" +#include "Utils.hpp" #include #include @@ -72,16 +73,12 @@ ContentFile ContextManager::createContentFile(const QString &filePath) const ProgrammingLanguage ContextManager::getDocumentLanguage(const QJsonObject &request) { - QJsonObject params = request["params"].toObject(); - QJsonObject doc = params["doc"].toObject(); - QString uri = doc["uri"].toString(); - - Utils::FilePath filePath = Utils::FilePath::fromString(QUrl(uri).toLocalFile()); + auto filePath = extractFilePathFromRequest(request); TextEditor::TextDocument *textDocument = TextEditor::TextDocument::textDocumentForFilePath( - filePath); + Utils::FilePath::fromString(filePath)); if (!textDocument) { - LOG_MESSAGE("Error: Document is not available for" + filePath.toFSPathString()); + LOG_MESSAGE("Error: Document is not available for" + filePath); return Context::ProgrammingLanguage::Unknown; } diff --git a/context/Utils.hpp b/context/Utils.hpp new file mode 100644 index 0000000..42b6d44 --- /dev/null +++ b/context/Utils.hpp @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2025 Povilas Kanapickas + * + * This file is part of QodeAssist. + * + * QodeAssist is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * QodeAssist is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with QodeAssist. If not, see . + */ + +#pragma once + +#include + +namespace QodeAssist::Context { + +inline QString extractFilePathFromRequest(const QJsonObject &request) +{ + QJsonObject params = request["params"].toObject(); + QJsonObject doc = params["doc"].toObject(); + QString uri = doc["uri"].toString(); + return QUrl(uri).toLocalFile(); +} + +} // namespace QodeAssist::Context