Skip to content

Instantly share code, notes, and snippets.

@kduske
Created November 30, 2020 18:55
Show Gist options
  • Save kduske/452e1de52bb7ddd89bd5f1be055f221b to your computer and use it in GitHub Desktop.
Save kduske/452e1de52bb7ddd89bd5f1be055f221b to your computer and use it in GitHub Desktop.
I[19:53:45.495] clangd version 11.0.0 (https://github.com/llvm/llvm-project 176249bd6732a8044d457092ed932768724a6f06)
I[19:53:45.495] PID: 53116
I[19:53:45.495] Working directory: /Users/kristian/Documents/Code/TrenchBroom
I[19:53:45.495] argv[0]: /Users/kristian/.bin/clangd_11.0.0/bin/clangd
I[19:53:45.495] argv[1]: --log=verbose
V[19:53:45.495] User config file is /Users/kristian/Library/Preferences/clangd/config.yaml
I[19:53:45.495] Starting LSP over stdin/stdout
V[19:53:45.496] <<< {"id":0,"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{"textDocument":{"callHierarchy":{"dynamicRegistration":true},"codeAction":{"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}},"dynamicRegistration":true,"isPreferredSupport":true},"codeLens":{"dynamicRegistration":true},"colorProvider":{"dynamicRegistration":true},"completion":{"completionItem":{"commitCharactersSupport":true,"deprecatedSupport":true,"documentationFormat":["markdown","plaintext"],"insertReplaceSupport":true,"preselectSupport":true,"resolveAdditionalTextEditsSupport":true,"snippetSupport":true,"tagSupport":{"valueSet":[1]}},"completionItemKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]},"contextSupport":true,"dynamicRegistration":true,"editsNearCursor":true},"declaration":{"dynamicRegistration":true,"linkSupport":true},"definition":{"dynamicRegistration":true,"linkSupport":true},"documentHighlight":{"dynamicRegistration":true},"documentLink":{"dynamicRegistration":true,"tooltipSupport":true},"documentSymbol":{"dynamicRegistration":true,"hierarchicalDocumentSymbolSupport":true,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]},"tagSupport":{"valueSet":[1]}},"foldingRange":{"dynamicRegistration":true,"lineFoldingOnly":true,"rangeLimit":5000},"formatting":{"dynamicRegistration":true},"hover":{"contentFormat":["markdown","plaintext"],"dynamicRegistration":true},"implementation":{"dynamicRegistration":true,"linkSupport":true},"onTypeFormatting":{"dynamicRegistration":true},"publishDiagnostics":{"complexDiagnosticCodeSupport":true,"relatedInformation":true,"tagSupport":{"valueSet":[1,2]},"versionSupport":false},"rangeFormatting":{"dynamicRegistration":true},"references":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true,"prepareSupport":true},"selectionRange":{"dynamicRegistration":true},"semanticHighlightingCapabilities":{"semanticHighlighting":true},"semanticTokens":{"dynamicRegistration":true,"formats":["relative"],"requests":{"full":{"delta":true},"range":true},"tokenModifiers":["declaration","definition","readonly","static","deprecated","abstract","async","modification","documentation","defaultLibrary"],"tokenTypes":["namespace","type","class","enum","interface","struct","typeParameter","parameter","variable","property","enumMember","event","function","member","macro","keyword","modifier","comment","string","number","regexp","operator"]},"signatureHelp":{"contextSupport":true,"dynamicRegistration":true,"signatureInformation":{"activeParameterSupport":true,"documentationFormat":["markdown","plaintext"],"parameterInformation":{"labelOffsetSupport":true}}},"synchronization":{"didSave":true,"dynamicRegistration":true,"willSave":true,"willSaveWaitUntil":true},"typeDefinition":{"dynamicRegistration":true,"linkSupport":true}},"window":{"workDoneProgress":true},"workspace":{"applyEdit":true,"configuration":true,"didChangeConfiguration":{"dynamicRegistration":true},"didChangeWatchedFiles":{"dynamicRegistration":true},"executeCommand":{"dynamicRegistration":true},"symbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]},"tagSupport":{"valueSet":[1]}},"workspaceEdit":{"documentChanges":true,"failureHandling":"textOnlyTransactional","resourceOperations":["create","rename","delete"]},"workspaceFolders":true}},"clientInfo":{"name":"vscode","version":"1.51.1"},"initializationOptions":{"clangdFileStatus":true,"fallbackFlags":[]},"processId":53081,"rootPath":"/Users/kristian/Documents/Code/TrenchBroom","rootUri":"file:///Users/kristian/Documents/Code/TrenchBroom","trace":"off","workspaceFolders":[{"name":"TrenchBroom","uri":"file:///Users/kristian/Documents/Code/TrenchBroom"}]}}
I[19:53:45.496] <-- initialize(0)
I[19:53:45.496] Client supports legacy semanticHighlights notification and standard semanticTokens request, choosing the latter (no notifications).
V[19:53:45.496] Invoking /usr/bin/xcrun to find clang installation
V[19:53:45.502] Invoking /usr/bin/xcrun to find clang installation
I[19:53:45.508] --> reply:initialize(0) 12 ms
V[19:53:45.508] >>> {"id":0,"jsonrpc":"2.0","result":{"capabilities":{"codeActionProvider":{"codeActionKinds":["quickfix","refactor","info"]},"completionProvider":{"allCommitCharacters":[" ","\t","(",")","[","]","{","}","<",">",":",";",",","+","-","/","*","%","^","&","#","?",".","=","\"","'","|"],"resolveProvider":false,"triggerCharacters":[".","<",">",":","\"","/"]},"declarationProvider":true,"definitionProvider":true,"documentFormattingProvider":true,"documentHighlightProvider":true,"documentLinkProvider":{"resolveProvider":false},"documentOnTypeFormattingProvider":{"firstTriggerCharacter":"\n","moreTriggerCharacter":[]},"documentRangeFormattingProvider":true,"documentSymbolProvider":true,"executeCommandProvider":{"commands":["clangd.applyFix","clangd.applyTweak"]},"hoverProvider":true,"referencesProvider":true,"renameProvider":{"prepareProvider":true},"selectionRangeProvider":true,"semanticTokensProvider":{"full":{"delta":true},"legend":{"tokenModifiers":[],"tokenTypes":["variable","variable","parameter","function","member","function","member","variable","class","enum","enumConstant","type","dependent","dependent","namespace","typeParameter","concept","type","macro","comment"]},"range":false},"signatureHelpProvider":{"triggerCharacters":["(",","]},"textDocumentSync":{"change":2,"openClose":true,"save":true},"typeHierarchyProvider":true,"workspaceSymbolProvider":true},"serverInfo":{"name":"clangd","version":"clangd version 11.0.0 (https://github.com/llvm/llvm-project 176249bd6732a8044d457092ed932768724a6f06)"}}}
V[19:53:45.522] <<< {"jsonrpc":"2.0","method":"initialized","params":{}}
I[19:53:45.522] <-- initialized
V[19:53:45.523] <<< {"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"languageId":"cpp","text":"/*\n Copyright (C) 2010-2017 Kristian Duske\n\n This file is part of TrenchBroom.\n\n TrenchBroom is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n TrenchBroom is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with TrenchBroom. If not, see <http://www.gnu.org/licenses/>.\n */\n\n#include \"GameImpl.h\"\n\n#include \"Ensure.h\"\n#include \"Exceptions.h\"\n#include \"Logger.h\"\n#include \"Macros.h\"\n#include \"Assets/Palette.h\"\n#include \"Assets/EntityModel.h\"\n#include \"Assets/EntityDefinitionFileSpec.h\"\n#include \"IO/AseParser.h\"\n#include \"IO/BrushFaceReader.h\"\n#include \"IO/Bsp29Parser.h\"\n#include \"IO/DefParser.h\"\n#include \"IO/DiskIO.h\"\n#include \"IO/DkmParser.h\"\n#include \"IO/DiskFileSystem.h\"\n#include \"IO/EntParser.h\"\n#include \"IO/FgdParser.h\"\n#include \"IO/File.h\"\n#include \"IO/FileMatcher.h\"\n#include \"IO/GameConfigParser.h\"\n#include \"IO/IOUtils.h\"\n#include \"IO/MdlParser.h\"\n#include \"IO/Md2Parser.h\"\n#include \"IO/Md3Parser.h\"\n#include \"IO/MdxParser.h\"\n#include \"IO/NodeReader.h\"\n#include \"IO/NodeWriter.h\"\n#include \"IO/ObjParser.h\"\n#include \"IO/ObjSerializer.h\"\n#include \"IO/WorldReader.h\"\n#include \"IO/SimpleParserStatus.h\"\n#include \"IO/SystemPaths.h\"\n#include \"IO/TextureLoader.h\"\n#include \"Model/BrushBuilder.h\"\n#include \"Model/BrushError.h\"\n#include \"Model/BrushNode.h\"\n#include \"Model/Entity.h\"\n#include \"Model/EntityAttributes.h\"\n#include \"Model/ExportFormat.h\"\n#include \"Model/GameConfig.h\"\n#include \"Model/LayerNode.h\"\n#include \"Model/WorldNode.h\"\n\n#include <kdl/overload.h>\n#include <kdl/result.h>\n#include <kdl/string_compare.h>\n#include <kdl/string_format.h>\n#include <kdl/string_utils.h>\n#include <kdl/vector_utils.h>\n\n#include <vecmath/vec_io.h>\n\n#include <fstream>\n#include <string>\n#include <vector>\n\nnamespace TrenchBroom {\n namespace Model {\n GameImpl::GameImpl(GameConfig& config, const IO::Path& gamePath, Logger& logger) :\n m_config(config),\n m_gamePath(gamePath) {\n initializeFileSystem(logger);\n }\n\n void GameImpl::initializeFileSystem(Logger& logger) {\n m_fs.initialize(m_config, m_gamePath, m_additionalSearchPaths, logger);\n }\n\n const std::string& GameImpl::doGameName() const {\n return m_config.name();\n }\n\n IO::Path GameImpl::doGamePath() const {\n return m_gamePath;\n }\n\n void GameImpl::doSetGamePath(const IO::Path& gamePath, Logger& logger) {\n if (gamePath != m_gamePath) {\n m_gamePath = gamePath;\n initializeFileSystem(logger);\n }\n }\n\n void GameImpl::doSetAdditionalSearchPaths(const std::vector<IO::Path>& searchPaths, Logger& logger) {\n if (searchPaths != m_additionalSearchPaths) {\n m_additionalSearchPaths = searchPaths;\n initializeFileSystem(logger);\n }\n }\n\n Game::PathErrors GameImpl::doCheckAdditionalSearchPaths(const std::vector<IO::Path>& searchPaths) const {\n PathErrors result;\n for (const auto& searchPath : searchPaths) {\n const auto absPath = m_gamePath + searchPath;\n if (!absPath.isAbsolute() || !IO::Disk::directoryExists(absPath)) {\n result.insert(std::make_pair(searchPath, \"Directory not found: '\" + searchPath.asString() + \"'\"));\n }\n }\n return result;\n }\n\n const CompilationConfig& GameImpl::doCompilationConfig() {\n return m_config.compilationConfig();\n }\n\n size_t GameImpl::doMaxPropertyLength() const {\n return m_config.maxPropertyLength();\n }\n\n std::optional<vm::bbox3> GameImpl::doSoftMapBounds() const {\n return m_config.softMapBounds();\n }\n\n Game::SoftMapBounds GameImpl::doExtractSoftMapBounds(const AttributableNode& node) const {\n if (!node.entity().hasAttribute(AttributeNames::SoftMapBounds)) {\n // Not set in map -> use Game value\n return {SoftMapBoundsType::Game, doSoftMapBounds()};\n }\n\n if (const auto* mapValue = node.entity().attribute(AttributeNames::SoftMapBounds); mapValue && *mapValue != AttributeValues::NoSoftMapBounds) {\n return {SoftMapBoundsType::Map, IO::parseSoftMapBoundsString(*mapValue)};\n } else {\n return {SoftMapBoundsType::Map, std::nullopt};\n }\n }\n\n const std::vector<SmartTag>& GameImpl::doSmartTags() const {\n return m_config.smartTags();\n }\n\n std::unique_ptr<WorldNode> GameImpl::doNewMap(const MapFormat format, const vm::bbox3& worldBounds, Logger& logger) const {\n const auto initialMapFilePath = m_config.findInitialMap(formatName(format));\n if (!initialMapFilePath.isEmpty() && IO::Disk::fileExists(initialMapFilePath)) {\n return doLoadMap(format, worldBounds, initialMapFilePath, logger);\n } else {\n auto worldEntity = Model::Entity();\n if (format == MapFormat::Valve || format == MapFormat::Quake2_Valve || format == MapFormat::Quake3_Valve) {\n worldEntity.addOrUpdateAttribute(AttributeNames::ValveVersion, \"220\");\n }\n\n auto worldNode = std::make_unique<WorldNode>(std::move(worldEntity), format);\n\n const Model::BrushBuilder builder(worldNode.get(), worldBounds, defaultFaceAttribs());\n builder.createCuboid(vm::vec3(128.0, 128.0, 32.0), Model::BrushFaceAttributes::NoTextureName).\n visit(kdl::overload(\n [&](Brush&& b) {\n worldNode->defaultLayer()->addChild(worldNode->createBrush(std::move(b)));\n },\n [&](const Model::BrushError e) {\n logger.error() << \"Could not create default brush: \" << e;\n }\n ));\n\n return worldNode;\n }\n }\n\n std::unique_ptr<WorldNode> GameImpl::doLoadMap(const MapFormat format, const vm::bbox3& worldBounds, const IO::Path& path, Logger& logger) const {\n IO::SimpleParserStatus parserStatus(logger);\n auto file = IO::Disk::openFile(IO::Disk::fixPath(path));\n auto fileReader = file->reader().buffer();\n IO::WorldReader worldReader(fileReader.stringView());\n return worldReader.read(format, worldBounds, parserStatus);\n }\n\n void GameImpl::doWriteMap(WorldNode& world, const IO::Path& path, const bool exporting) const {\n const auto mapFormatName = formatName(world.format());\n\n std::ofstream file = openPathAsOutputStream(path);\n if (!file) {\n throw FileSystemException(\"Cannot open file: \" + path.asString());\n }\n IO::writeGameComment(file, gameName(), mapFormatName);\n\n IO::NodeWriter writer(world, file);\n writer.setExporting(exporting);\n writer.writeMap();\n }\n\n void GameImpl::doWriteMap(WorldNode& world, const IO::Path& path) const {\n doWriteMap(world, path, false);\n }\n\n void GameImpl::doExportMap(WorldNode& world, const Model::ExportFormat format, const IO::Path& path) const {\n switch (format) {\n case Model::ExportFormat::WavefrontObj: {\n IO::NodeWriter writer(world, std::make_unique<IO::ObjFileSerializer>(path));\n writer.setExporting(true);\n writer.writeMap();\n break;\n }\n case Model::ExportFormat::Map:\n doWriteMap(world, path, true);\n break;\n }\n }\n\n std::vector<Node*> GameImpl::doParseNodes(const std::string& str, WorldNode& world, const vm::bbox3& worldBounds, Logger& logger) const {\n IO::SimpleParserStatus parserStatus(logger);\n return IO::NodeReader::read(str, world, worldBounds, parserStatus);\n }\n\n std::vector<BrushFace> GameImpl::doParseBrushFaces(const std::string& str, WorldNode& world, const vm::bbox3& worldBounds, Logger& logger) const {\n IO::SimpleParserStatus parserStatus(logger);\n IO::BrushFaceReader reader(str, world);\n return reader.read(worldBounds, parserStatus);\n }\n\n void GameImpl::doWriteNodesToStream(WorldNode& world, const std::vector<Node*>& nodes, std::ostream& stream) const {\n IO::NodeWriter writer(world, stream);\n writer.writeNodes(nodes);\n }\n\n void GameImpl::doWriteBrushFacesToStream(WorldNode& world, const std::vector<BrushFace>& faces, std::ostream& stream) const {\n IO::NodeWriter writer(world, stream);\n writer.writeBrushFaces(faces);\n }\n\n Game::TexturePackageType GameImpl::doTexturePackageType() const {\n using Model::GameConfig;\n switch (m_config.textureConfig().package.type) {\n case TexturePackageConfig::PT_File:\n return TexturePackageType::File;\n case TexturePackageConfig::PT_Directory:\n return TexturePackageType::Directory;\n case TexturePackageConfig::PT_Unset:\n throw GameException(\"Texture package type is not set in game configuration\");\n switchDefault()\n }\n }\n\n void GameImpl::doLoadTextureCollections(AttributableNode& node, const IO::Path& documentPath, Assets::TextureManager& textureManager, Logger& logger) const {\n const auto paths = extractTextureCollections(node);\n\n const auto fileSearchPaths = textureCollectionSearchPaths(documentPath);\n IO::TextureLoader textureLoader(m_fs, fileSearchPaths, m_config.textureConfig(), logger);\n textureLoader.loadTextures(paths, textureManager);\n }\n\n std::vector<IO::Path> GameImpl::textureCollectionSearchPaths(const IO::Path& documentPath) const {\n std::vector<IO::Path> result;\n\n // Search for assets relative to the map file.\n result.push_back(documentPath);\n\n // Search for assets relative to the location of the game.\n result.push_back(m_gamePath);\n\n // Search for assets relative to the application itself.\n result.push_back(IO::SystemPaths::appDirectory());\n\n return result;\n }\n\n bool GameImpl::doIsTextureCollection(const IO::Path& path) const {\n const auto& packageConfig = m_config.textureConfig().package;\n switch (packageConfig.type) {\n case TexturePackageConfig::PT_File:\n return path.hasExtension(packageConfig.fileFormat.extensions, false);\n case TexturePackageConfig::PT_Directory:\n case TexturePackageConfig::PT_Unset:\n return false;\n switchDefault()\n }\n }\n\n std::vector<IO::Path> GameImpl::doFindTextureCollections() const {\n try {\n const auto& searchPath = m_config.textureConfig().package.rootDirectory;\n if (!searchPath.isEmpty() && m_fs.directoryExists(searchPath)) {\n return kdl::vec_concat(std::vector<IO::Path>({searchPath}), m_fs.findItemsRecursively(searchPath, IO::FileTypeMatcher(false, true)));\n }\n return std::vector<IO::Path>();\n } catch (FileSystemException& e) {\n throw GameException(\"Could not find texture collections: \" + std::string(e.what()));\n }\n }\n\n std::vector<std::string> GameImpl::doFileTextureCollectionExtensions() const {\n return m_config.textureConfig().package.fileFormat.extensions;\n }\n\n std::vector<IO::Path> GameImpl::doExtractTextureCollections(const AttributableNode& node) const {\n const auto& property = m_config.textureConfig().attribute;\n if (property.empty()) {\n return {};\n }\n\n const auto* pathsValue = node.entity().attribute(property);\n if (!pathsValue) {\n return {};\n }\n \n return IO::Path::asPaths(kdl::str_split(*pathsValue, \";\"));\n }\n\n void GameImpl::doUpdateTextureCollections(AttributableNode& node, const std::vector<IO::Path>& paths) const {\n const auto& attribute = m_config.textureConfig().attribute;\n if (attribute.empty()) {\n return;\n }\n\n const auto value = kdl::str_join(IO::Path::asStrings(paths, \"/\"), \";\");\n auto entity = node.entity();\n entity.addOrUpdateAttribute(attribute, value);\n node.setEntity(std::move(entity));\n }\n\n void GameImpl::doReloadShaders() {\n m_fs.reloadShaders();\n }\n\n bool GameImpl::doIsEntityDefinitionFile(const IO::Path& path) const {\n const auto extension = path.extension();\n if (kdl::ci::str_is_equal(\"fgd\", extension)) {\n return true;\n } else if (kdl::ci::str_is_equal(\"def\", extension)) {\n return true;\n } else if (kdl::ci::str_is_equal(\"ent\", extension)) {\n return true;\n } else {\n return false;\n }\n }\n\n std::vector<Assets::EntityDefinition*> GameImpl::doLoadEntityDefinitions(IO::ParserStatus& status, const IO::Path& path) const {\n const auto extension = path.extension();\n const auto& defaultColor = m_config.entityConfig().defaultColor;\n\n if (kdl::ci::str_is_equal(\"fgd\", extension)) {\n auto file = IO::Disk::openFile(IO::Disk::fixPath(path));\n auto reader = file->reader().buffer();\n IO::FgdParser parser(reader.stringView(), defaultColor, file->path());\n return parser.parseDefinitions(status);\n } else if (kdl::ci::str_is_equal(\"def\", extension)) {\n auto file = IO::Disk::openFile(IO::Disk::fixPath(path));\n auto reader = file->reader().buffer();\n IO::DefParser parser(reader.stringView(), defaultColor);\n return parser.parseDefinitions(status);\n } else if (kdl::ci::str_is_equal(\"ent\", extension)) {\n auto file = IO::Disk::openFile(IO::Disk::fixPath(path));\n auto reader = file->reader().buffer();\n IO::EntParser parser(reader.stringView(), defaultColor);\n return parser.parseDefinitions(status);\n } else {\n throw GameException(\"Unknown entity definition format: '\" + path.asString() + \"'\");\n }\n }\n\n std::vector<Assets::EntityDefinitionFileSpec> GameImpl::doAllEntityDefinitionFiles() const {\n const auto paths = m_config.entityConfig().defFilePaths;\n const auto count = paths.size();\n\n std::vector<Assets::EntityDefinitionFileSpec> result;\n result.reserve(count);\n\n for (const auto& path : paths) {\n result.push_back(Assets::EntityDefinitionFileSpec::builtin(path));\n }\n\n return result;\n }\n\n Assets::EntityDefinitionFileSpec GameImpl::doExtractEntityDefinitionFile(const AttributableNode& node) const {\n if (const auto* defValue = node.entity().attribute(AttributeNames::EntityDefinitions)) {\n return Assets::EntityDefinitionFileSpec::parse(*defValue);\n } else {\n return defaultEntityDefinitionFile();\n }\n }\n\n Assets::EntityDefinitionFileSpec GameImpl::defaultEntityDefinitionFile() const {\n const auto paths = m_config.entityConfig().defFilePaths;\n if (paths.empty()) {\n throw GameException(\"No entity definition files found for game '\" + gameName() + \"'\");\n }\n\n const auto& path = paths.front();\n return Assets::EntityDefinitionFileSpec::builtin(path);\n }\n\n IO::Path GameImpl::doFindEntityDefinitionFile(const Assets::EntityDefinitionFileSpec& spec, const std::vector<IO::Path>& searchPaths) const {\n if (!spec.valid()) {\n throw GameException(\"Invalid entity definition file spec\");\n }\n\n const auto& path = spec.path();\n if (spec.builtin()) {\n return m_config.findConfigFile(path);\n } else {\n if (path.isAbsolute()) {\n return path;\n } else {\n return IO::Disk::resolvePath(searchPaths, path);\n }\n }\n }\n\n std::unique_ptr<Assets::EntityModel> GameImpl::doInitializeModel(const IO::Path& path, Logger& logger) const {\n try {\n auto file = m_fs.openFile(path);\n ensure(file != nullptr, \"file is null\");\n\n const auto modelName = path.lastComponent().asString();\n const auto extension = kdl::str_to_lower(path.extension());\n const auto supported = m_config.entityConfig().modelFormats;\n\n if (extension == \"mdl\" && kdl::vec_contains(supported, \"mdl\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::MdlParser parser(modelName, std::begin(reader), std::end(reader), palette);\n return parser.initializeModel(logger);\n } else if (extension == \"md2\" && kdl::vec_contains(supported, \"md2\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::Md2Parser parser(modelName, std::begin(reader), std::end(reader), palette, m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"md3\" && kdl::vec_contains(supported, \"md3\")) {\n auto reader = file->reader().buffer();\n IO::Md3Parser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"mdx\" && kdl::vec_contains(supported, \"mdx\")) {\n auto reader = file->reader().buffer();\n IO::MdxParser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"bsp\" && kdl::vec_contains(supported, \"bsp\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::Bsp29Parser parser(modelName, std::begin(reader), std::end(reader), palette, m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"dkm\" && kdl::vec_contains(supported, \"dkm\")) {\n auto reader = file->reader().buffer();\n IO::DkmParser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"ase\" && kdl::vec_contains(supported, \"ase\")) {\n auto reader = file->reader().buffer();\n IO::AseParser parser(modelName, reader.stringView(), m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"obj\" && kdl::vec_contains(supported, \"obj_neverball\")) {\n auto reader = file->reader().buffer();\n // has to be the whole path for implicit textures!\n IO::NvObjParser parser(path, std::begin(reader), std::end(reader), m_fs);\n return parser.initializeModel(logger);\n } else {\n throw GameException(\"Unsupported model format '\" + path.asString() + \"'\");\n }\n } catch (const FileSystemException& e) {\n throw GameException(\"Could not load model \" + path.asString() + \": \" + std::string(e.what()));\n } catch (const AssetException& e) {\n throw GameException(\"Could not load model \" + path.asString() + \": \" + std::string(e.what()));\n } catch (const ParserException& e) {\n throw GameException(\"Could not load model \" + path.asString() + \": \" + std::string(e.what()));\n }\n }\n\n void GameImpl::doLoadFrame(const IO::Path& path, size_t frameIndex, Assets::EntityModel& model, Logger& logger) const {\n try {\n ensure(model.frame(frameIndex) != nullptr, \"invalid frame index\");\n ensure(!model.frame(frameIndex)->loaded(), \"frame already loaded\");\n\n const auto file = m_fs.openFile(path);\n ensure(file != nullptr, \"file is null\");\n\n const auto modelName = path.lastComponent().asString();\n const auto extension = kdl::str_to_lower(path.extension());\n const auto supported = m_config.entityConfig().modelFormats;\n\n if (extension == \"mdl\" && kdl::vec_contains(supported, \"mdl\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::MdlParser parser(modelName, std::begin(reader), std::end(reader), palette);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"md2\" && kdl::vec_contains(supported, \"md2\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::Md2Parser parser(modelName, std::begin(reader), std::end(reader), palette, m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"md3\" && kdl::vec_contains(supported, \"md3\")) {\n auto reader = file->reader().buffer();\n IO::Md3Parser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"mdx\" && kdl::vec_contains(supported, \"mdx\")) {\n auto reader = file->reader().buffer();\n IO::MdxParser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"bsp\" && kdl::vec_contains(supported, \"bsp\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::Bsp29Parser parser(modelName, std::begin(reader), std::end(reader), palette, m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"dkm\" && kdl::vec_contains(supported, \"dkm\")) {\n auto reader = file->reader().buffer();\n IO::DkmParser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"ase\" && kdl::vec_contains(supported, \"ase\")) {\n auto reader = file->reader().buffer();\n IO::AseParser parser(modelName, reader.stringView(), m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"obj\" && kdl::vec_contains(supported, \"obj_neverball\")) {\n auto reader = file->reader().buffer();\n // has to be the whole path for implicit textures!\n IO::NvObjParser parser(path, std::begin(reader), std::end(reader), m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else {\n throw GameException(\"Unsupported model format '\" + path.asString() + \"'\");\n }\n } catch (FileSystemException& e) {\n throw GameException(\"Could not load model \" + path.asString() + \": \" + std::string(e.what()));\n } catch (AssetException& e) {\n throw GameException(\"Could not load model \" + path.asString() + \": \" + std::string(e.what()));\n }\n }\n\n Assets::Palette GameImpl::loadTexturePalette() const {\n const auto& path = m_config.textureConfig().palette;\n return Assets::Palette::loadFile(m_fs, path);\n }\n\n std::vector<std::string> GameImpl::doAvailableMods() const {\n std::vector<std::string> result;\n if (m_gamePath.isEmpty() || !IO::Disk::directoryExists(m_gamePath)) {\n return result;\n }\n\n const auto& defaultMod = m_config.fileSystemConfig().searchPath.lastComponent().asString();\n const IO::DiskFileSystem fs(m_gamePath);\n const auto subDirs = fs.findItems(IO::Path(\"\"), IO::FileTypeMatcher(false, true));\n for (size_t i = 0; i < subDirs.size(); ++i) {\n const std::string mod = subDirs[i].lastComponent().asString();\n if (!kdl::ci::str_is_equal(mod, defaultMod)) {\n result.push_back(mod);\n }\n }\n return result;\n }\n\n std::vector<std::string> GameImpl::doExtractEnabledMods(const AttributableNode& node) const {\n if (const auto* modStr = node.entity().attribute(AttributeNames::Mods)) {\n return kdl::str_split(*modStr, \";\");\n } else {\n return {};\n }\n }\n\n std::string GameImpl::doDefaultMod() const {\n return m_config.fileSystemConfig().searchPath.asString();\n }\n\n const FlagsConfig& GameImpl::doSurfaceFlags() const {\n return m_config.faceAttribsConfig().surfaceFlags;\n }\n\n const FlagsConfig& GameImpl::doContentFlags() const {\n return m_config.faceAttribsConfig().contentFlags;\n }\n\n const BrushFaceAttributes& GameImpl::doDefaultFaceAttribs() const {\n return m_config.faceAttribsConfig().defaults;\n }\n\n const std::vector<CompilationTool>& GameImpl::doCompilationTools() const {\n return m_config.compilationTools();\n }\n\n void GameImpl::writeLongAttribute(AttributableNode& node, const std::string& baseName, const std::string& value, const size_t maxLength) const {\n auto entity = node.entity();\n entity.removeNumberedAttribute(baseName);\n\n std::stringstream nameStr;\n for (size_t i = 0; i <= value.size() / maxLength; ++i) {\n nameStr.str(\"\");\n nameStr << baseName << i+1;\n entity.addOrUpdateAttribute(nameStr.str(), value.substr(i * maxLength, maxLength));\n }\n\n node.setEntity(std::move(entity));\n }\n\n std::string GameImpl::readLongAttribute(const AttributableNode& node, const std::string& baseName) const {\n size_t index = 1;\n std::stringstream nameStr;\n std::stringstream valueStr;\n nameStr << baseName << index;\n\n const auto& entity = node.entity();\n while (entity.hasAttribute(nameStr.str())) {\n if (const auto* value = entity.attribute(nameStr.str())) {\n valueStr << *value;\n }\n nameStr.str(\"\");\n nameStr << baseName << ++index;\n }\n\n return valueStr.str();\n }\n }\n}\n","uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp","version":1}}}
I[19:53:45.534] <-- textDocument/didOpen
I[19:53:45.538] Loaded compilation database from /Users/kristian/Documents/Code/TrenchBroom
I[19:53:45.541] Loaded compilation database from /Users/kristian/Documents/Code/TrenchBroom/build
I[19:53:45.542] --> window/workDoneProgress/create(0)
V[19:53:45.542] >>> {"id":0,"jsonrpc":"2.0","method":"window/workDoneProgress/create","params":{"token":"backgroundIndexProgress"}}
I[19:53:45.543] Enqueueing 609 commands for indexing
I[19:53:45.543] ASTWorker building file /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp version 1 with command
[/Users/kristian/Documents/Code/TrenchBroom/build]
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ --driver-mode=g++ -DFMT_LOCALE -DGLEW_STATIC -DGL_SILENCE_DEPRECATION -DQT_CORE_LIB -DQT_GUI_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -Icommon/common_autogen/include -I../common/src -Icommon -I../lib/kdl/include -I../lib/vecmath/include -I../lib/fmt/include -isystem ../lib/tinyxml2/include -isystem ../lib/glew/include -isystem ../lib/miniz/include -isystem ../lib/BinaryLibs/freeimage/include/win32 -isystem ../lib/freetype/include -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/System/Library/Frameworks -iframework /opt/local/libexec/qt5/lib -isystem /opt/local/libexec/qt5/lib/QtWidgets.framework/Headers -isystem /opt/local/libexec/qt5/lib/QtGui.framework/Headers -isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/System/Library/Frameworks/OpenGL.framework/Headers -isystem /opt/local/libexec/qt5/lib/QtCore.framework/Headers -isystem /opt/local/libexec/qt5/./mkspecs/macx-clang -isystem /opt/local/libexec/qt5/lib/QtSvg.framework/Headers -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk -mmacosx-version-min=10.14 -Wall -Wextra -Wconversion -Wshadow-all -pedantic -Wno-global-constructors -Wno-exit-time-destructors -Wno-padded -Wno-format-nonliteral -Wno-used-but-marked-unused -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++98-compat-bind-to-temporary-copy -Wno-weak-vtables -Wno-weak-template-vtables -Wno-missing-braces -Wno-redundant-parens -Wno-pragma-system-header-outside-header -Wno-float-equal -fPIC -std=gnu++17 -Winvalid-pch -Xclang -include-pch -Xclang /Users/kristian/Documents/Code/TrenchBroom/build/common/CMakeFiles/common.dir/cmake_pch.hxx.pch -Xclang -include -Xclang /Users/kristian/Documents/Code/TrenchBroom/build/common/CMakeFiles/common.dir/cmake_pch.hxx -o common/CMakeFiles/common.dir/src/Model/GameImpl.cpp.o -c /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp -fsyntax-only -resource-dir=/Users/kristian/.bin/clangd_11.0.0/lib/clang/11.0.0
V[19:53:45.544] Driver produced command: cc1 -cc1 -triple x86_64-apple-macosx10.14.0 -Wundef-prefix=TARGET_OS_ -Werror=undef-prefix -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -fsyntax-only -disable-free -disable-llvm-verifier -discard-value-names -main-file-name GameImpl.cpp -mrelocation-model pic -pic-level 2 -mframe-pointer=all -fno-rounding-math -munwind-tables -target-sdk-version=11.0 -fcompatibility-qualified-id-block-type-checking -target-cpu penryn -debug-info-kind=standalone -dwarf-version=4 -debugger-tuning=lldb -target-linker-version 609 -resource-dir /Users/kristian/.bin/clangd_11.0.0/lib/clang/11.0.0 -isystem ../lib/tinyxml2/include -isystem ../lib/glew/include -isystem ../lib/miniz/include -isystem ../lib/BinaryLibs/freeimage/include/win32 -isystem ../lib/freetype/include -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/System/Library/Frameworks -iframework /opt/local/libexec/qt5/lib -isystem /opt/local/libexec/qt5/lib/QtWidgets.framework/Headers -isystem /opt/local/libexec/qt5/lib/QtGui.framework/Headers -isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/System/Library/Frameworks/OpenGL.framework/Headers -isystem /opt/local/libexec/qt5/lib/QtCore.framework/Headers -isystem /opt/local/libexec/qt5/./mkspecs/macx-clang -isystem /opt/local/libexec/qt5/lib/QtSvg.framework/Headers -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk -D FMT_LOCALE -D GLEW_STATIC -D GL_SILENCE_DEPRECATION -D QT_CORE_LIB -D QT_GUI_LIB -D QT_SVG_LIB -D QT_WIDGETS_LIB -I common/common_autogen/include -I ../common/src -I common -I ../lib/kdl/include -I ../lib/vecmath/include -I ../lib/fmt/include -stdlib=libc++ -internal-isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1 -internal-isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/usr/include/c++/v1 -internal-isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/usr/local/include -internal-isystem /Users/kristian/.bin/clangd_11.0.0/lib/clang/11.0.0/include -internal-externc-isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/usr/include -Wall -Wextra -Wconversion -Wshadow-all -Wno-global-constructors -Wno-exit-time-destructors -Wno-padded -Wno-format-nonliteral -Wno-used-but-marked-unused -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++98-compat-bind-to-temporary-copy -Wno-weak-vtables -Wno-weak-template-vtables -Wno-missing-braces -Wno-redundant-parens -Wno-pragma-system-header-outside-header -Wno-float-equal -Winvalid-pch -pedantic -std=gnu++17 -fdeprecated-macro -fdebug-compilation-dir /Users/kristian/Documents/Code/TrenchBroom/build -ferror-limit 19 -stack-protector 1 -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -fmax-type-align=16 -include-pch /Users/kristian/Documents/Code/TrenchBroom/build/common/CMakeFiles/common.dir/cmake_pch.hxx.pch -include /Users/kristian/Documents/Code/TrenchBroom/build/common/CMakeFiles/common.dir/cmake_pch.hxx -x c++ /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp
I[19:53:45.544] --> textDocument/clangd.fileStatus
V[19:53:45.544] >>> {"jsonrpc":"2.0","method":"textDocument/clangd.fileStatus","params":{"state":"parsing includes,running Update (1)","uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp"}}
V[19:53:45.544] Building first preamble for /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp version 1
V[19:53:45.582] <<< {"id":0,"jsonrpc":"2.0","result":null}
I[19:53:45.582] <-- reply(0)
I[19:53:45.582] --> $/progress
V[19:53:45.582] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"begin","percentage":0,"title":"indexing"}}}
I[19:53:45.582] --> $/progress
V[19:53:45.582] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/1","percentage":0}}}
V[19:53:45.627] <<< {"id":1,"jsonrpc":"2.0","method":"textDocument/codeAction","params":{"context":{"diagnostics":[]},"range":{"end":{"character":60,"line":252},"start":{"character":59,"line":252}},"textDocument":{"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp"}}}
I[19:53:45.627] <-- textDocument/codeAction(1)
V[19:53:45.627] <<< {"id":2,"jsonrpc":"2.0","method":"textDocument/documentLink","params":{"textDocument":{"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp"}}}
I[19:53:45.627] <-- textDocument/documentLink(2)
V[19:53:45.915] BackgroundIndex: building version 1 after loading index from disk
V[19:53:45.944] <<< {"id":3,"jsonrpc":"2.0","method":"textDocument/semanticTokens/full","params":{"textDocument":{"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp"}}}
I[19:53:45.944] <-- textDocument/semanticTokens/full(3)
V[19:53:46.530] BackgroundIndex: serving version 1 (85154579 bytes)
E[19:53:46.535] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/ChangeBrushFaceAttributesCommand.h to validate stored index: No such file or directory
E[19:53:46.545] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/CopyTexCoordSystemFromFaceCommand.h to validate stored index: No such file or directory
E[19:53:46.547] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/RotateTexturesCommand.h to validate stored index: No such file or directory
E[19:53:46.551] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/ChangeEntityAttributesCommand.h to validate stored index: No such file or directory
E[19:53:46.552] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/ShearTexturesCommand.h to validate stored index: No such file or directory
E[19:53:46.568] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/ResizeBrushesCommand.h to validate stored index: No such file or directory
E[19:53:46.569] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/ConvertEntityColorCommand.h to validate stored index: No such file or directory
V[19:53:46.571] <<< {"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":1}}
I[19:53:46.571] <-- $/cancelRequest
V[19:53:46.571] <<< {"id":4,"jsonrpc":"2.0","method":"textDocument/codeAction","params":{"context":{"diagnostics":[]},"range":{"end":{"character":60,"line":252},"start":{"character":59,"line":252}},"textDocument":{"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp"}}}
I[19:53:46.571] <-- textDocument/codeAction(4)
V[19:53:46.572] <<< {"id":5,"jsonrpc":"2.0","method":"textDocument/documentLink","params":{"textDocument":{"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp"}}}
I[19:53:46.572] <-- textDocument/documentLink(5)
E[19:53:46.573] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/TransformObjectsCommand.h to validate stored index: No such file or directory
E[19:53:46.575] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MoveTexturesCommand.h to validate stored index: No such file or directory
E[19:53:46.584] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/UpdateEntitySpawnflagCommand.h to validate stored index: No such file or directory
I[19:53:46.592] --> $/progress
V[19:53:46.592] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/28","percentage":0}}}
I[19:53:46.592] --> $/progress
V[19:53:46.592] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/28","percentage":0}}}
I[19:53:46.592] --> $/progress
V[19:53:46.592] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/28","percentage":0}}}
I[19:53:46.592] --> $/progress
V[19:53:46.593] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/28","percentage":0}}}
I[19:53:46.593] --> $/progress
V[19:53:46.593] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/28","percentage":0}}}
I[19:53:46.593] --> $/progress
V[19:53:46.593] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/28","percentage":0}}}
I[19:53:46.593] --> $/progress
V[19:53:46.593] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/28","percentage":0}}}
I[19:53:46.593] --> $/progress
V[19:53:46.593] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"1/28","percentage":3.5714285714285716}}}
I[19:53:46.593] --> $/progress
V[19:53:46.593] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"1/28","percentage":3.5714285714285716}}}
I[19:53:46.593] --> $/progress
V[19:53:46.593] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"1/28","percentage":3.5714285714285716}}}
I[19:53:46.593] --> $/progress
V[19:53:46.593] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"1/28","percentage":3.5714285714285716}}}
I[19:53:46.593] --> $/progress
V[19:53:46.593] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"1/28","percentage":3.5714285714285716}}}
V[19:53:46.593] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/NodeCollection.cpp (digest:=26AACABCF8C65FF2)
V[19:53:46.593] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.cpp (digest:=B602EF7B4016021F)
V[19:53:46.594] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameConfig.cpp (digest:=962D90B0F8FC18A9)
V[19:53:46.594] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Preferences.cpp (digest:=B3D000225E81ACCD)
V[19:53:46.594] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/test/src/IO/GameConfigParserTest.cpp (digest:=53B179D017E091E0)
V[19:53:46.594] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapDocument.cpp (digest:=7D0912E625854F38)
V[19:53:46.595] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Game.cpp (digest:=FB4B0A92B3AB7F69)
V[19:53:46.595] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GroupNode.cpp (digest:=09CBA9B7CD9ED044)
V[19:53:46.595] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/LayerNode.cpp (digest:=EAE9AAF9548B6BB7)
V[19:53:46.596] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapDocumentCommandFacade.cpp (digest:=7363A6F578FD620A)
V[19:53:47.515] <<< {"id":6,"jsonrpc":"2.0","method":"shutdown"}
I[19:53:47.515] <-- shutdown(6)
I[19:53:47.515] --> reply:shutdown(6) 0 ms
V[19:53:47.515] >>> {"id":6,"jsonrpc":"2.0","result":null}
[Error - 7:53:47 PM] Request textDocument/codeAction failed.
Error: Connection got disposed.
at Object.dispose (/Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-jsonrpc/lib/common/connection.js:1009:27)
at Object.dispose (/Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-languageclient/lib/common/client.js:71:35)
at /Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-languageclient/lib/common/client.js:2211:28
at runNextTicks (internal/process/task_queues.js:59:5)
at processImmediate (internal/timers.js:412:9)
[Error - 7:53:47 PM] Request textDocument/documentLink failed.
Error: Connection got disposed.
at Object.dispose (/Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-jsonrpc/lib/common/connection.js:1009:27)
at Object.dispose (/Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-languageclient/lib/common/client.js:71:35)
at /Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-languageclient/lib/common/client.js:2211:28
at runNextTicks (internal/process/task_queues.js:59:5)
at processImmediate (internal/timers.js:412:9)
[Error - 7:53:47 PM] Request textDocument/semanticTokens/full failed.
Error: Connection got disposed.
at Object.dispose (/Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-jsonrpc/lib/common/connection.js:1009:27)
at Object.dispose (/Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-languageclient/lib/common/client.js:71:35)
at /Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-languageclient/lib/common/client.js:2211:28
at runNextTicks (internal/process/task_queues.js:59:5)
at processImmediate (internal/timers.js:412:9)
[Error - 7:53:47 PM] Request textDocument/codeAction failed.
Error: Connection got disposed.
at Object.dispose (/Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-jsonrpc/lib/common/connection.js:1009:27)
at Object.dispose (/Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-languageclient/lib/common/client.js:71:35)
at /Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-languageclient/lib/common/client.js:2211:28
at runNextTicks (internal/process/task_queues.js:59:5)
at processImmediate (internal/timers.js:412:9)
[Error - 7:53:47 PM] Request textDocument/documentLink failed.
Error: Connection got disposed.
at Object.dispose (/Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-jsonrpc/lib/common/connection.js:1009:27)
at Object.dispose (/Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-languageclient/lib/common/client.js:71:35)
at /Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-languageclient/lib/common/client.js:2211:28
at runNextTicks (internal/process/task_queues.js:59:5)
at processImmediate (internal/timers.js:412:9)
V[19:53:47.532] <<< {"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":4}}
I[19:53:47.532] <-- $/cancelRequest
V[19:53:47.532] <<< {"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":5}}
I[19:53:47.532] <-- $/cancelRequest
I[19:53:47.528] clangd version 11.0.0 (https://github.com/llvm/llvm-project 176249bd6732a8044d457092ed932768724a6f06)
I[19:53:47.529] PID: 53217
I[19:53:47.529] Working directory: /Users/kristian/Documents/Code/TrenchBroom
I[19:53:47.529] argv[0]: /Users/kristian/.bin/clangd_11.0.0/bin/clangd
I[19:53:47.529] argv[1]: --log=verbose
V[19:53:47.529] User config file is /Users/kristian/Library/Preferences/clangd/config.yaml
I[19:53:47.529] Starting LSP over stdin/stdout
V[19:53:47.529] <<< {"id":0,"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{"textDocument":{"callHierarchy":{"dynamicRegistration":true},"codeAction":{"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}},"dynamicRegistration":true,"isPreferredSupport":true},"codeLens":{"dynamicRegistration":true},"colorProvider":{"dynamicRegistration":true},"completion":{"completionItem":{"commitCharactersSupport":true,"deprecatedSupport":true,"documentationFormat":["markdown","plaintext"],"insertReplaceSupport":true,"preselectSupport":true,"resolveAdditionalTextEditsSupport":true,"snippetSupport":true,"tagSupport":{"valueSet":[1]}},"completionItemKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]},"contextSupport":true,"dynamicRegistration":true,"editsNearCursor":true},"declaration":{"dynamicRegistration":true,"linkSupport":true},"definition":{"dynamicRegistration":true,"linkSupport":true},"documentHighlight":{"dynamicRegistration":true},"documentLink":{"dynamicRegistration":true,"tooltipSupport":true},"documentSymbol":{"dynamicRegistration":true,"hierarchicalDocumentSymbolSupport":true,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]},"tagSupport":{"valueSet":[1]}},"foldingRange":{"dynamicRegistration":true,"lineFoldingOnly":true,"rangeLimit":5000},"formatting":{"dynamicRegistration":true},"hover":{"contentFormat":["markdown","plaintext"],"dynamicRegistration":true},"implementation":{"dynamicRegistration":true,"linkSupport":true},"onTypeFormatting":{"dynamicRegistration":true},"publishDiagnostics":{"complexDiagnosticCodeSupport":true,"relatedInformation":true,"tagSupport":{"valueSet":[1,2]},"versionSupport":false},"rangeFormatting":{"dynamicRegistration":true},"references":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true,"prepareSupport":true},"selectionRange":{"dynamicRegistration":true},"semanticHighlightingCapabilities":{"semanticHighlighting":true},"semanticTokens":{"dynamicRegistration":true,"formats":["relative"],"requests":{"full":{"delta":true},"range":true},"tokenModifiers":["declaration","definition","readonly","static","deprecated","abstract","async","modification","documentation","defaultLibrary"],"tokenTypes":["namespace","type","class","enum","interface","struct","typeParameter","parameter","variable","property","enumMember","event","function","member","macro","keyword","modifier","comment","string","number","regexp","operator"]},"signatureHelp":{"contextSupport":true,"dynamicRegistration":true,"signatureInformation":{"activeParameterSupport":true,"documentationFormat":["markdown","plaintext"],"parameterInformation":{"labelOffsetSupport":true}}},"synchronization":{"didSave":true,"dynamicRegistration":true,"willSave":true,"willSaveWaitUntil":true},"typeDefinition":{"dynamicRegistration":true,"linkSupport":true}},"window":{"workDoneProgress":true},"workspace":{"applyEdit":true,"configuration":true,"didChangeConfiguration":{"dynamicRegistration":true},"didChangeWatchedFiles":{"dynamicRegistration":true},"executeCommand":{"dynamicRegistration":true},"symbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]},"tagSupport":{"valueSet":[1]}},"workspaceEdit":{"documentChanges":true,"failureHandling":"textOnlyTransactional","resourceOperations":["create","rename","delete"]},"workspaceFolders":true}},"clientInfo":{"name":"vscode","version":"1.51.1"},"initializationOptions":{"clangdFileStatus":true,"fallbackFlags":[]},"processId":53081,"rootPath":"/Users/kristian/Documents/Code/TrenchBroom","rootUri":"file:///Users/kristian/Documents/Code/TrenchBroom","trace":"off","workspaceFolders":[{"name":"TrenchBroom","uri":"file:///Users/kristian/Documents/Code/TrenchBroom"}]}}
I[19:53:47.529] <-- initialize(0)
I[19:53:47.529] Client supports legacy semanticHighlights notification and standard semanticTokens request, choosing the latter (no notifications).
V[19:53:47.530] Invoking /usr/bin/xcrun to find clang installation
V[19:53:47.532] <<< {"jsonrpc":"2.0","method":"exit"}
I[19:53:47.532] <-- exit
I[19:53:47.532] LSP finished, exiting with status 0
I[19:53:47.532] --> reply:textDocument/codeAction(1) 1905 ms, error: Task was cancelled.
V[19:53:47.532] >>> {"error":{"code":-32800,"message":"Request cancelled"},"id":1,"jsonrpc":"2.0"}
V[19:53:47.533] ASTWorker rebuilding evicted AST to run DocumentLinks: /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp version 1
V[19:53:47.536] Invoking /usr/bin/xcrun to find clang installation
I[19:53:47.544] --> reply:initialize(0) 14 ms
V[19:53:47.544] >>> {"id":0,"jsonrpc":"2.0","result":{"capabilities":{"codeActionProvider":{"codeActionKinds":["quickfix","refactor","info"]},"completionProvider":{"allCommitCharacters":[" ","\t","(",")","[","]","{","}","<",">",":",";",",","+","-","/","*","%","^","&","#","?",".","=","\"","'","|"],"resolveProvider":false,"triggerCharacters":[".","<",">",":","\"","/"]},"declarationProvider":true,"definitionProvider":true,"documentFormattingProvider":true,"documentHighlightProvider":true,"documentLinkProvider":{"resolveProvider":false},"documentOnTypeFormattingProvider":{"firstTriggerCharacter":"\n","moreTriggerCharacter":[]},"documentRangeFormattingProvider":true,"documentSymbolProvider":true,"executeCommandProvider":{"commands":["clangd.applyFix","clangd.applyTweak"]},"hoverProvider":true,"referencesProvider":true,"renameProvider":{"prepareProvider":true},"selectionRangeProvider":true,"semanticTokensProvider":{"full":{"delta":true},"legend":{"tokenModifiers":[],"tokenTypes":["variable","variable","parameter","function","member","function","member","variable","class","enum","enumConstant","type","dependent","dependent","namespace","typeParameter","concept","type","macro","comment"]},"range":false},"signatureHelpProvider":{"triggerCharacters":["(",","]},"textDocumentSync":{"change":2,"openClose":true,"save":true},"typeHierarchyProvider":true,"workspaceSymbolProvider":true},"serverInfo":{"name":"clangd","version":"clangd version 11.0.0 (https://github.com/llvm/llvm-project 176249bd6732a8044d457092ed932768724a6f06)"}}}
V[19:53:47.709] <<< {"jsonrpc":"2.0","method":"initialized","params":{}}
I[19:53:47.709] <-- initialized
V[19:53:47.710] <<< {"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"languageId":"cpp","text":"/*\n Copyright (C) 2010-2017 Kristian Duske\n\n This file is part of TrenchBroom.\n\n TrenchBroom is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n TrenchBroom is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with TrenchBroom. If not, see <http://www.gnu.org/licenses/>.\n */\n\n#include \"GameImpl.h\"\n\n#include \"Ensure.h\"\n#include \"Exceptions.h\"\n#include \"Logger.h\"\n#include \"Macros.h\"\n#include \"Assets/Palette.h\"\n#include \"Assets/EntityModel.h\"\n#include \"Assets/EntityDefinitionFileSpec.h\"\n#include \"IO/AseParser.h\"\n#include \"IO/BrushFaceReader.h\"\n#include \"IO/Bsp29Parser.h\"\n#include \"IO/DefParser.h\"\n#include \"IO/DiskIO.h\"\n#include \"IO/DkmParser.h\"\n#include \"IO/DiskFileSystem.h\"\n#include \"IO/EntParser.h\"\n#include \"IO/FgdParser.h\"\n#include \"IO/File.h\"\n#include \"IO/FileMatcher.h\"\n#include \"IO/GameConfigParser.h\"\n#include \"IO/IOUtils.h\"\n#include \"IO/MdlParser.h\"\n#include \"IO/Md2Parser.h\"\n#include \"IO/Md3Parser.h\"\n#include \"IO/MdxParser.h\"\n#include \"IO/NodeReader.h\"\n#include \"IO/NodeWriter.h\"\n#include \"IO/ObjParser.h\"\n#include \"IO/ObjSerializer.h\"\n#include \"IO/WorldReader.h\"\n#include \"IO/SimpleParserStatus.h\"\n#include \"IO/SystemPaths.h\"\n#include \"IO/TextureLoader.h\"\n#include \"Model/BrushBuilder.h\"\n#include \"Model/BrushError.h\"\n#include \"Model/BrushNode.h\"\n#include \"Model/Entity.h\"\n#include \"Model/EntityAttributes.h\"\n#include \"Model/ExportFormat.h\"\n#include \"Model/GameConfig.h\"\n#include \"Model/LayerNode.h\"\n#include \"Model/WorldNode.h\"\n\n#include <kdl/overload.h>\n#include <kdl/result.h>\n#include <kdl/string_compare.h>\n#include <kdl/string_format.h>\n#include <kdl/string_utils.h>\n#include <kdl/vector_utils.h>\n\n#include <vecmath/vec_io.h>\n\n#include <fstream>\n#include <string>\n#include <vector>\n\nnamespace TrenchBroom {\n namespace Model {\n GameImpl::GameImpl(GameConfig& config, const IO::Path& gamePath, Logger& logger) :\n m_config(config),\n m_gamePath(gamePath) {\n initializeFileSystem(logger);\n }\n\n void GameImpl::initializeFileSystem(Logger& logger) {\n m_fs.initialize(m_config, m_gamePath, m_additionalSearchPaths, logger);\n }\n\n const std::string& GameImpl::doGameName() const {\n return m_config.name();\n }\n\n IO::Path GameImpl::doGamePath() const {\n return m_gamePath;\n }\n\n void GameImpl::doSetGamePath(const IO::Path& gamePath, Logger& logger) {\n if (gamePath != m_gamePath) {\n m_gamePath = gamePath;\n initializeFileSystem(logger);\n }\n }\n\n void GameImpl::doSetAdditionalSearchPaths(const std::vector<IO::Path>& searchPaths, Logger& logger) {\n if (searchPaths != m_additionalSearchPaths) {\n m_additionalSearchPaths = searchPaths;\n initializeFileSystem(logger);\n }\n }\n\n Game::PathErrors GameImpl::doCheckAdditionalSearchPaths(const std::vector<IO::Path>& searchPaths) const {\n PathErrors result;\n for (const auto& searchPath : searchPaths) {\n const auto absPath = m_gamePath + searchPath;\n if (!absPath.isAbsolute() || !IO::Disk::directoryExists(absPath)) {\n result.insert(std::make_pair(searchPath, \"Directory not found: '\" + searchPath.asString() + \"'\"));\n }\n }\n return result;\n }\n\n const CompilationConfig& GameImpl::doCompilationConfig() {\n return m_config.compilationConfig();\n }\n\n size_t GameImpl::doMaxPropertyLength() const {\n return m_config.maxPropertyLength();\n }\n\n std::optional<vm::bbox3> GameImpl::doSoftMapBounds() const {\n return m_config.softMapBounds();\n }\n\n Game::SoftMapBounds GameImpl::doExtractSoftMapBounds(const AttributableNode& node) const {\n if (!node.entity().hasAttribute(AttributeNames::SoftMapBounds)) {\n // Not set in map -> use Game value\n return {SoftMapBoundsType::Game, doSoftMapBounds()};\n }\n\n if (const auto* mapValue = node.entity().attribute(AttributeNames::SoftMapBounds); mapValue && *mapValue != AttributeValues::NoSoftMapBounds) {\n return {SoftMapBoundsType::Map, IO::parseSoftMapBoundsString(*mapValue)};\n } else {\n return {SoftMapBoundsType::Map, std::nullopt};\n }\n }\n\n const std::vector<SmartTag>& GameImpl::doSmartTags() const {\n return m_config.smartTags();\n }\n\n std::unique_ptr<WorldNode> GameImpl::doNewMap(const MapFormat format, const vm::bbox3& worldBounds, Logger& logger) const {\n const auto initialMapFilePath = m_config.findInitialMap(formatName(format));\n if (!initialMapFilePath.isEmpty() && IO::Disk::fileExists(initialMapFilePath)) {\n return doLoadMap(format, worldBounds, initialMapFilePath, logger);\n } else {\n auto worldEntity = Model::Entity();\n if (format == MapFormat::Valve || format == MapFormat::Quake2_Valve || format == MapFormat::Quake3_Valve) {\n worldEntity.addOrUpdateAttribute(AttributeNames::ValveVersion, \"220\");\n }\n\n auto worldNode = std::make_unique<WorldNode>(std::move(worldEntity), format);\n\n const Model::BrushBuilder builder(worldNode.get(), worldBounds, defaultFaceAttribs());\n builder.createCuboid(vm::vec3(128.0, 128.0, 32.0), Model::BrushFaceAttributes::NoTextureName).\n visit(kdl::overload(\n [&](Brush&& b) {\n worldNode->defaultLayer()->addChild(worldNode->createBrush(std::move(b)));\n },\n [&](const Model::BrushError e) {\n logger.error() << \"Could not create default brush: \" << e;\n }\n ));\n\n return worldNode;\n }\n }\n\n std::unique_ptr<WorldNode> GameImpl::doLoadMap(const MapFormat format, const vm::bbox3& worldBounds, const IO::Path& path, Logger& logger) const {\n IO::SimpleParserStatus parserStatus(logger);\n auto file = IO::Disk::openFile(IO::Disk::fixPath(path));\n auto fileReader = file->reader().buffer();\n IO::WorldReader worldReader(fileReader.stringView());\n return worldReader.read(format, worldBounds, parserStatus);\n }\n\n void GameImpl::doWriteMap(WorldNode& world, const IO::Path& path, const bool exporting) const {\n const auto mapFormatName = formatName(world.format());\n\n std::ofstream file = openPathAsOutputStream(path);\n if (!file) {\n throw FileSystemException(\"Cannot open file: \" + path.asString());\n }\n IO::writeGameComment(file, gameName(), mapFormatName);\n\n IO::NodeWriter writer(world, file);\n writer.setExporting(exporting);\n writer.writeMap();\n }\n\n void GameImpl::doWriteMap(WorldNode& world, const IO::Path& path) const {\n doWriteMap(world, path, false);\n }\n\n void GameImpl::doExportMap(WorldNode& world, const Model::ExportFormat format, const IO::Path& path) const {\n switch (format) {\n case Model::ExportFormat::WavefrontObj: {\n IO::NodeWriter writer(world, std::make_unique<IO::ObjFileSerializer>(path));\n writer.setExporting(true);\n writer.writeMap();\n break;\n }\n case Model::ExportFormat::Map:\n doWriteMap(world, path, true);\n break;\n }\n }\n\n std::vector<Node*> GameImpl::doParseNodes(const std::string& str, WorldNode& world, const vm::bbox3& worldBounds, Logger& logger) const {\n IO::SimpleParserStatus parserStatus(logger);\n return IO::NodeReader::read(str, world, worldBounds, parserStatus);\n }\n\n std::vector<BrushFace> GameImpl::doParseBrushFaces(const std::string& str, WorldNode& world, const vm::bbox3& worldBounds, Logger& logger) const {\n IO::SimpleParserStatus parserStatus(logger);\n IO::BrushFaceReader reader(str, world);\n return reader.read(worldBounds, parserStatus);\n }\n\n void GameImpl::doWriteNodesToStream(WorldNode& world, const std::vector<Node*>& nodes, std::ostream& stream) const {\n IO::NodeWriter writer(world, stream);\n writer.writeNodes(nodes);\n }\n\n void GameImpl::doWriteBrushFacesToStream(WorldNode& world, const std::vector<BrushFace>& faces, std::ostream& stream) const {\n IO::NodeWriter writer(world, stream);\n writer.writeBrushFaces(faces);\n }\n\n Game::TexturePackageType GameImpl::doTexturePackageType() const {\n using Model::GameConfig;\n switch (m_config.textureConfig().package.type) {\n case TexturePackageConfig::PT_File:\n return TexturePackageType::File;\n case TexturePackageConfig::PT_Directory:\n return TexturePackageType::Directory;\n case TexturePackageConfig::PT_Unset:\n throw GameException(\"Texture package type is not set in game configuration\");\n switchDefault()\n }\n }\n\n void GameImpl::doLoadTextureCollections(AttributableNode& node, const IO::Path& documentPath, Assets::TextureManager& textureManager, Logger& logger) const {\n const auto paths = extractTextureCollections(node);\n\n const auto fileSearchPaths = textureCollectionSearchPaths(documentPath);\n IO::TextureLoader textureLoader(m_fs, fileSearchPaths, m_config.textureConfig(), logger);\n textureLoader.loadTextures(paths, textureManager);\n }\n\n std::vector<IO::Path> GameImpl::textureCollectionSearchPaths(const IO::Path& documentPath) const {\n std::vector<IO::Path> result;\n\n // Search for assets relative to the map file.\n result.push_back(documentPath);\n\n // Search for assets relative to the location of the game.\n result.push_back(m_gamePath);\n\n // Search for assets relative to the application itself.\n result.push_back(IO::SystemPaths::appDirectory());\n\n return result;\n }\n\n bool GameImpl::doIsTextureCollection(const IO::Path& path) const {\n const auto& packageConfig = m_config.textureConfig().package;\n switch (packageConfig.type) {\n case TexturePackageConfig::PT_File:\n return path.hasExtension(packageConfig.fileFormat.extensions, false);\n case TexturePackageConfig::PT_Directory:\n case TexturePackageConfig::PT_Unset:\n return false;\n switchDefault()\n }\n }\n\n std::vector<IO::Path> GameImpl::doFindTextureCollections() const {\n try {\n const auto& searchPath = m_config.textureConfig().package.rootDirectory;\n if (!searchPath.isEmpty() && m_fs.directoryExists(searchPath)) {\n return kdl::vec_concat(std::vector<IO::Path>({searchPath}), m_fs.findItemsRecursively(searchPath, IO::FileTypeMatcher(false, true)));\n }\n return std::vector<IO::Path>();\n } catch (FileSystemException& e) {\n throw GameException(\"Could not find texture collections: \" + std::string(e.what()));\n }\n }\n\n std::vector<std::string> GameImpl::doFileTextureCollectionExtensions() const {\n return m_config.textureConfig().package.fileFormat.extensions;\n }\n\n std::vector<IO::Path> GameImpl::doExtractTextureCollections(const AttributableNode& node) const {\n const auto& property = m_config.textureConfig().attribute;\n if (property.empty()) {\n return {};\n }\n\n const auto* pathsValue = node.entity().attribute(property);\n if (!pathsValue) {\n return {};\n }\n \n return IO::Path::asPaths(kdl::str_split(*pathsValue, \";\"));\n }\n\n void GameImpl::doUpdateTextureCollections(AttributableNode& node, const std::vector<IO::Path>& paths) const {\n const auto& attribute = m_config.textureConfig().attribute;\n if (attribute.empty()) {\n return;\n }\n\n const auto value = kdl::str_join(IO::Path::asStrings(paths, \"/\"), \";\");\n auto entity = node.entity();\n entity.addOrUpdateAttribute(attribute, value);\n node.setEntity(std::move(entity));\n }\n\n void GameImpl::doReloadShaders() {\n m_fs.reloadShaders();\n }\n\n bool GameImpl::doIsEntityDefinitionFile(const IO::Path& path) const {\n const auto extension = path.extension();\n if (kdl::ci::str_is_equal(\"fgd\", extension)) {\n return true;\n } else if (kdl::ci::str_is_equal(\"def\", extension)) {\n return true;\n } else if (kdl::ci::str_is_equal(\"ent\", extension)) {\n return true;\n } else {\n return false;\n }\n }\n\n std::vector<Assets::EntityDefinition*> GameImpl::doLoadEntityDefinitions(IO::ParserStatus& status, const IO::Path& path) const {\n const auto extension = path.extension();\n const auto& defaultColor = m_config.entityConfig().defaultColor;\n\n if (kdl::ci::str_is_equal(\"fgd\", extension)) {\n auto file = IO::Disk::openFile(IO::Disk::fixPath(path));\n auto reader = file->reader().buffer();\n IO::FgdParser parser(reader.stringView(), defaultColor, file->path());\n return parser.parseDefinitions(status);\n } else if (kdl::ci::str_is_equal(\"def\", extension)) {\n auto file = IO::Disk::openFile(IO::Disk::fixPath(path));\n auto reader = file->reader().buffer();\n IO::DefParser parser(reader.stringView(), defaultColor);\n return parser.parseDefinitions(status);\n } else if (kdl::ci::str_is_equal(\"ent\", extension)) {\n auto file = IO::Disk::openFile(IO::Disk::fixPath(path));\n auto reader = file->reader().buffer();\n IO::EntParser parser(reader.stringView(), defaultColor);\n return parser.parseDefinitions(status);\n } else {\n throw GameException(\"Unknown entity definition format: '\" + path.asString() + \"'\");\n }\n }\n\n std::vector<Assets::EntityDefinitionFileSpec> GameImpl::doAllEntityDefinitionFiles() const {\n const auto paths = m_config.entityConfig().defFilePaths;\n const auto count = paths.size();\n\n std::vector<Assets::EntityDefinitionFileSpec> result;\n result.reserve(count);\n\n for (const auto& path : paths) {\n result.push_back(Assets::EntityDefinitionFileSpec::builtin(path));\n }\n\n return result;\n }\n\n Assets::EntityDefinitionFileSpec GameImpl::doExtractEntityDefinitionFile(const AttributableNode& node) const {\n if (const auto* defValue = node.entity().attribute(AttributeNames::EntityDefinitions)) {\n return Assets::EntityDefinitionFileSpec::parse(*defValue);\n } else {\n return defaultEntityDefinitionFile();\n }\n }\n\n Assets::EntityDefinitionFileSpec GameImpl::defaultEntityDefinitionFile() const {\n const auto paths = m_config.entityConfig().defFilePaths;\n if (paths.empty()) {\n throw GameException(\"No entity definition files found for game '\" + gameName() + \"'\");\n }\n\n const auto& path = paths.front();\n return Assets::EntityDefinitionFileSpec::builtin(path);\n }\n\n IO::Path GameImpl::doFindEntityDefinitionFile(const Assets::EntityDefinitionFileSpec& spec, const std::vector<IO::Path>& searchPaths) const {\n if (!spec.valid()) {\n throw GameException(\"Invalid entity definition file spec\");\n }\n\n const auto& path = spec.path();\n if (spec.builtin()) {\n return m_config.findConfigFile(path);\n } else {\n if (path.isAbsolute()) {\n return path;\n } else {\n return IO::Disk::resolvePath(searchPaths, path);\n }\n }\n }\n\n std::unique_ptr<Assets::EntityModel> GameImpl::doInitializeModel(const IO::Path& path, Logger& logger) const {\n try {\n auto file = m_fs.openFile(path);\n ensure(file != nullptr, \"file is null\");\n\n const auto modelName = path.lastComponent().asString();\n const auto extension = kdl::str_to_lower(path.extension());\n const auto supported = m_config.entityConfig().modelFormats;\n\n if (extension == \"mdl\" && kdl::vec_contains(supported, \"mdl\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::MdlParser parser(modelName, std::begin(reader), std::end(reader), palette);\n return parser.initializeModel(logger);\n } else if (extension == \"md2\" && kdl::vec_contains(supported, \"md2\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::Md2Parser parser(modelName, std::begin(reader), std::end(reader), palette, m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"md3\" && kdl::vec_contains(supported, \"md3\")) {\n auto reader = file->reader().buffer();\n IO::Md3Parser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"mdx\" && kdl::vec_contains(supported, \"mdx\")) {\n auto reader = file->reader().buffer();\n IO::MdxParser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"bsp\" && kdl::vec_contains(supported, \"bsp\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::Bsp29Parser parser(modelName, std::begin(reader), std::end(reader), palette, m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"dkm\" && kdl::vec_contains(supported, \"dkm\")) {\n auto reader = file->reader().buffer();\n IO::DkmParser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"ase\" && kdl::vec_contains(supported, \"ase\")) {\n auto reader = file->reader().buffer();\n IO::AseParser parser(modelName, reader.stringView(), m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"obj\" && kdl::vec_contains(supported, \"obj_neverball\")) {\n auto reader = file->reader().buffer();\n // has to be the whole path for implicit textures!\n IO::NvObjParser parser(path, std::begin(reader), std::end(reader), m_fs);\n return parser.initializeModel(logger);\n } else {\n throw GameException(\"Unsupported model format '\" + path.asString() + \"'\");\n }\n } catch (const FileSystemException& e) {\n throw GameException(\"Could not load model \" + path.asString() + \": \" + std::string(e.what()));\n } catch (const AssetException& e) {\n throw GameException(\"Could not load model \" + path.asString() + \": \" + std::string(e.what()));\n } catch (const ParserException& e) {\n throw GameException(\"Could not load model \" + path.asString() + \": \" + std::string(e.what()));\n }\n }\n\n void GameImpl::doLoadFrame(const IO::Path& path, size_t frameIndex, Assets::EntityModel& model, Logger& logger) const {\n try {\n ensure(model.frame(frameIndex) != nullptr, \"invalid frame index\");\n ensure(!model.frame(frameIndex)->loaded(), \"frame already loaded\");\n\n const auto file = m_fs.openFile(path);\n ensure(file != nullptr, \"file is null\");\n\n const auto modelName = path.lastComponent().asString();\n const auto extension = kdl::str_to_lower(path.extension());\n const auto supported = m_config.entityConfig().modelFormats;\n\n if (extension == \"mdl\" && kdl::vec_contains(supported, \"mdl\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::MdlParser parser(modelName, std::begin(reader), std::end(reader), palette);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"md2\" && kdl::vec_contains(supported, \"md2\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::Md2Parser parser(modelName, std::begin(reader), std::end(reader), palette, m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"md3\" && kdl::vec_contains(supported, \"md3\")) {\n auto reader = file->reader().buffer();\n IO::Md3Parser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"mdx\" && kdl::vec_contains(supported, \"mdx\")) {\n auto reader = file->reader().buffer();\n IO::MdxParser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"bsp\" && kdl::vec_contains(supported, \"bsp\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::Bsp29Parser parser(modelName, std::begin(reader), std::end(reader), palette, m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"dkm\" && kdl::vec_contains(supported, \"dkm\")) {\n auto reader = file->reader().buffer();\n IO::DkmParser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"ase\" && kdl::vec_contains(supported, \"ase\")) {\n auto reader = file->reader().buffer();\n IO::AseParser parser(modelName, reader.stringView(), m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"obj\" && kdl::vec_contains(supported, \"obj_neverball\")) {\n auto reader = file->reader().buffer();\n // has to be the whole path for implicit textures!\n IO::NvObjParser parser(path, std::begin(reader), std::end(reader), m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else {\n throw GameException(\"Unsupported model format '\" + path.asString() + \"'\");\n }\n } catch (FileSystemException& e) {\n throw GameException(\"Could not load model \" + path.asString() + \": \" + std::string(e.what()));\n } catch (AssetException& e) {\n throw GameException(\"Could not load model \" + path.asString() + \": \" + std::string(e.what()));\n }\n }\n\n Assets::Palette GameImpl::loadTexturePalette() const {\n const auto& path = m_config.textureConfig().palette;\n return Assets::Palette::loadFile(m_fs, path);\n }\n\n std::vector<std::string> GameImpl::doAvailableMods() const {\n std::vector<std::string> result;\n if (m_gamePath.isEmpty() || !IO::Disk::directoryExists(m_gamePath)) {\n return result;\n }\n\n const auto& defaultMod = m_config.fileSystemConfig().searchPath.lastComponent().asString();\n const IO::DiskFileSystem fs(m_gamePath);\n const auto subDirs = fs.findItems(IO::Path(\"\"), IO::FileTypeMatcher(false, true));\n for (size_t i = 0; i < subDirs.size(); ++i) {\n const std::string mod = subDirs[i].lastComponent().asString();\n if (!kdl::ci::str_is_equal(mod, defaultMod)) {\n result.push_back(mod);\n }\n }\n return result;\n }\n\n std::vector<std::string> GameImpl::doExtractEnabledMods(const AttributableNode& node) const {\n if (const auto* modStr = node.entity().attribute(AttributeNames::Mods)) {\n return kdl::str_split(*modStr, \";\");\n } else {\n return {};\n }\n }\n\n std::string GameImpl::doDefaultMod() const {\n return m_config.fileSystemConfig().searchPath.asString();\n }\n\n const FlagsConfig& GameImpl::doSurfaceFlags() const {\n return m_config.faceAttribsConfig().surfaceFlags;\n }\n\n const FlagsConfig& GameImpl::doContentFlags() const {\n return m_config.faceAttribsConfig().contentFlags;\n }\n\n const BrushFaceAttributes& GameImpl::doDefaultFaceAttribs() const {\n return m_config.faceAttribsConfig().defaults;\n }\n\n const std::vector<CompilationTool>& GameImpl::doCompilationTools() const {\n return m_config.compilationTools();\n }\n\n void GameImpl::writeLongAttribute(AttributableNode& node, const std::string& baseName, const std::string& value, const size_t maxLength) const {\n auto entity = node.entity();\n entity.removeNumberedAttribute(baseName);\n\n std::stringstream nameStr;\n for (size_t i = 0; i <= value.size() / maxLength; ++i) {\n nameStr.str(\"\");\n nameStr << baseName << i+1;\n entity.addOrUpdateAttribute(nameStr.str(), value.substr(i * maxLength, maxLength));\n }\n\n node.setEntity(std::move(entity));\n }\n\n std::string GameImpl::readLongAttribute(const AttributableNode& node, const std::string& baseName) const {\n size_t index = 1;\n std::stringstream nameStr;\n std::stringstream valueStr;\n nameStr << baseName << index;\n\n const auto& entity = node.entity();\n while (entity.hasAttribute(nameStr.str())) {\n if (const auto* value = entity.attribute(nameStr.str())) {\n valueStr << *value;\n }\n nameStr.str(\"\");\n nameStr << baseName << ++index;\n }\n\n return valueStr.str();\n }\n }\n}\n","uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp","version":1}}}
I[19:53:47.711] <-- textDocument/didOpen
V[19:53:47.713] <<< {"id":1,"jsonrpc":"2.0","method":"textDocument/codeAction","params":{"context":{"diagnostics":[]},"range":{"end":{"character":60,"line":252},"start":{"character":59,"line":252}},"textDocument":{"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp"}}}
I[19:53:47.713] <-- textDocument/codeAction(1)
V[19:53:47.713] <<< {"id":2,"jsonrpc":"2.0","method":"textDocument/documentLink","params":{"textDocument":{"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp"}}}
I[19:53:47.713] <-- textDocument/documentLink(2)
I[19:53:47.716] Loaded compilation database from /Users/kristian/Documents/Code/TrenchBroom
I[19:53:47.721] Loaded compilation database from /Users/kristian/Documents/Code/TrenchBroom/build
I[19:53:47.723] --> window/workDoneProgress/create(0)
V[19:53:47.723] >>> {"id":0,"jsonrpc":"2.0","method":"window/workDoneProgress/create","params":{"token":"backgroundIndexProgress"}}
I[19:53:47.723] Enqueueing 609 commands for indexing
I[19:53:47.724] ASTWorker building file /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp version 1 with command
[/Users/kristian/Documents/Code/TrenchBroom/build]
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ --driver-mode=g++ -DFMT_LOCALE -DGLEW_STATIC -DGL_SILENCE_DEPRECATION -DQT_CORE_LIB -DQT_GUI_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -Icommon/common_autogen/include -I../common/src -Icommon -I../lib/kdl/include -I../lib/vecmath/include -I../lib/fmt/include -isystem ../lib/tinyxml2/include -isystem ../lib/glew/include -isystem ../lib/miniz/include -isystem ../lib/BinaryLibs/freeimage/include/win32 -isystem ../lib/freetype/include -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/System/Library/Frameworks -iframework /opt/local/libexec/qt5/lib -isystem /opt/local/libexec/qt5/lib/QtWidgets.framework/Headers -isystem /opt/local/libexec/qt5/lib/QtGui.framework/Headers -isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/System/Library/Frameworks/OpenGL.framework/Headers -isystem /opt/local/libexec/qt5/lib/QtCore.framework/Headers -isystem /opt/local/libexec/qt5/./mkspecs/macx-clang -isystem /opt/local/libexec/qt5/lib/QtSvg.framework/Headers -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk -mmacosx-version-min=10.14 -Wall -Wextra -Wconversion -Wshadow-all -pedantic -Wno-global-constructors -Wno-exit-time-destructors -Wno-padded -Wno-format-nonliteral -Wno-used-but-marked-unused -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++98-compat-bind-to-temporary-copy -Wno-weak-vtables -Wno-weak-template-vtables -Wno-missing-braces -Wno-redundant-parens -Wno-pragma-system-header-outside-header -Wno-float-equal -fPIC -std=gnu++17 -Winvalid-pch -Xclang -include-pch -Xclang /Users/kristian/Documents/Code/TrenchBroom/build/common/CMakeFiles/common.dir/cmake_pch.hxx.pch -Xclang -include -Xclang /Users/kristian/Documents/Code/TrenchBroom/build/common/CMakeFiles/common.dir/cmake_pch.hxx -o common/CMakeFiles/common.dir/src/Model/GameImpl.cpp.o -c /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp -fsyntax-only -resource-dir=/Users/kristian/.bin/clangd_11.0.0/lib/clang/11.0.0
V[19:53:47.724] <<< {"id":0,"jsonrpc":"2.0","result":null}
I[19:53:47.724] <-- reply(0)
I[19:53:47.724] --> $/progress
V[19:53:47.724] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"begin","percentage":0,"title":"indexing"}}}
I[19:53:47.724] --> $/progress
V[19:53:47.724] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/1","percentage":0}}}
V[19:53:47.726] Driver produced command: cc1 -cc1 -triple x86_64-apple-macosx10.14.0 -Wundef-prefix=TARGET_OS_ -Werror=undef-prefix -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -fsyntax-only -disable-free -disable-llvm-verifier -discard-value-names -main-file-name GameImpl.cpp -mrelocation-model pic -pic-level 2 -mframe-pointer=all -fno-rounding-math -munwind-tables -target-sdk-version=11.0 -fcompatibility-qualified-id-block-type-checking -target-cpu penryn -debug-info-kind=standalone -dwarf-version=4 -debugger-tuning=lldb -target-linker-version 609 -resource-dir /Users/kristian/.bin/clangd_11.0.0/lib/clang/11.0.0 -isystem ../lib/tinyxml2/include -isystem ../lib/glew/include -isystem ../lib/miniz/include -isystem ../lib/BinaryLibs/freeimage/include/win32 -isystem ../lib/freetype/include -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/System/Library/Frameworks -iframework /opt/local/libexec/qt5/lib -isystem /opt/local/libexec/qt5/lib/QtWidgets.framework/Headers -isystem /opt/local/libexec/qt5/lib/QtGui.framework/Headers -isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/System/Library/Frameworks/OpenGL.framework/Headers -isystem /opt/local/libexec/qt5/lib/QtCore.framework/Headers -isystem /opt/local/libexec/qt5/./mkspecs/macx-clang -isystem /opt/local/libexec/qt5/lib/QtSvg.framework/Headers -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk -D FMT_LOCALE -D GLEW_STATIC -D GL_SILENCE_DEPRECATION -D QT_CORE_LIB -D QT_GUI_LIB -D QT_SVG_LIB -D QT_WIDGETS_LIB -I common/common_autogen/include -I ../common/src -I common -I ../lib/kdl/include -I ../lib/vecmath/include -I ../lib/fmt/include -stdlib=libc++ -internal-isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1 -internal-isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/usr/include/c++/v1 -internal-isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/usr/local/include -internal-isystem /Users/kristian/.bin/clangd_11.0.0/lib/clang/11.0.0/include -internal-externc-isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/usr/include -Wall -Wextra -Wconversion -Wshadow-all -Wno-global-constructors -Wno-exit-time-destructors -Wno-padded -Wno-format-nonliteral -Wno-used-but-marked-unused -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++98-compat-bind-to-temporary-copy -Wno-weak-vtables -Wno-weak-template-vtables -Wno-missing-braces -Wno-redundant-parens -Wno-pragma-system-header-outside-header -Wno-float-equal -Winvalid-pch -pedantic -std=gnu++17 -fdeprecated-macro -fdebug-compilation-dir /Users/kristian/Documents/Code/TrenchBroom/build -ferror-limit 19 -stack-protector 1 -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -fmax-type-align=16 -include-pch /Users/kristian/Documents/Code/TrenchBroom/build/common/CMakeFiles/common.dir/cmake_pch.hxx.pch -include /Users/kristian/Documents/Code/TrenchBroom/build/common/CMakeFiles/common.dir/cmake_pch.hxx -x c++ /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp
I[19:53:47.726] --> textDocument/clangd.fileStatus
V[19:53:47.726] >>> {"jsonrpc":"2.0","method":"textDocument/clangd.fileStatus","params":{"state":"parsing includes,running Update (1)","uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp"}}
V[19:53:47.726] Building first preamble for /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp version 1
V[19:53:47.894] indexed preamble AST for /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp version 1:
symbol slab: 53207 symbols, 13818712 bytes
ref slab: 0 symbols, 0 refs, 136 bytes
relations slab: 873 relations, 17432 bytes
V[19:53:48.013] <<< {"id":3,"jsonrpc":"2.0","method":"textDocument/semanticTokens/full","params":{"textDocument":{"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp"}}}
I[19:53:48.013] <-- textDocument/semanticTokens/full(3)
V[19:53:48.119] BackgroundIndex: building version 1 after loading index from disk
V[19:53:48.285] <<< {"id":4,"jsonrpc":"2.0","method":"shutdown"}
I[19:53:48.285] <-- shutdown(4)
I[19:53:48.285] --> reply:shutdown(4) 0 ms
V[19:53:48.285] >>> {"id":4,"jsonrpc":"2.0","result":null}
[Error - 7:53:48 PM] Request textDocument/codeAction failed.
Error: Connection got disposed.
at Object.dispose (/Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-jsonrpc/lib/common/connection.js:1009:27)
at Object.dispose (/Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-languageclient/lib/common/client.js:71:35)
at /Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-languageclient/lib/common/client.js:2211:28
[Error - 7:53:48 PM] Request textDocument/documentLink failed.
Error: Connection got disposed.
at Object.dispose (/Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-jsonrpc/lib/common/connection.js:1009:27)
at Object.dispose (/Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-languageclient/lib/common/client.js:71:35)
at /Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-languageclient/lib/common/client.js:2211:28
[Error - 7:53:48 PM] Request textDocument/semanticTokens/full failed.
Error: Connection got disposed.
at Object.dispose (/Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-jsonrpc/lib/common/connection.js:1009:27)
at Object.dispose (/Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-languageclient/lib/common/client.js:71:35)
at /Users/kristian/.vscode/extensions/llvm-vs-code-extensions.vscode-clangd-0.1.8/node_modules/vscode-languageclient/lib/common/client.js:2211:28
V[19:53:48.312] <<< {"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":1}}
I[19:53:48.312] <-- $/cancelRequest
V[19:53:48.312] <<< {"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":2}}
I[19:53:48.312] <-- $/cancelRequest
V[19:53:48.316] <<< {"jsonrpc":"2.0","method":"exit"}
I[19:53:48.316] <-- exit
I[19:53:48.316] LSP finished, exiting with status 0
I[19:53:48.314] clangd version 11.0.0 (https://github.com/llvm/llvm-project 176249bd6732a8044d457092ed932768724a6f06)
I[19:53:48.314] PID: 53221
I[19:53:48.315] Working directory: /Users/kristian/Documents/Code/TrenchBroom
I[19:53:48.315] argv[0]: /Users/kristian/.bin/clangd_11.0.0/bin/clangd
I[19:53:48.315] argv[1]: --log=verbose
V[19:53:48.315] User config file is /Users/kristian/Library/Preferences/clangd/config.yaml
I[19:53:48.315] Starting LSP over stdin/stdout
V[19:53:48.315] <<< {"id":0,"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{"textDocument":{"callHierarchy":{"dynamicRegistration":true},"codeAction":{"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}},"dynamicRegistration":true,"isPreferredSupport":true},"codeLens":{"dynamicRegistration":true},"colorProvider":{"dynamicRegistration":true},"completion":{"completionItem":{"commitCharactersSupport":true,"deprecatedSupport":true,"documentationFormat":["markdown","plaintext"],"insertReplaceSupport":true,"preselectSupport":true,"resolveAdditionalTextEditsSupport":true,"snippetSupport":true,"tagSupport":{"valueSet":[1]}},"completionItemKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]},"contextSupport":true,"dynamicRegistration":true,"editsNearCursor":true},"declaration":{"dynamicRegistration":true,"linkSupport":true},"definition":{"dynamicRegistration":true,"linkSupport":true},"documentHighlight":{"dynamicRegistration":true},"documentLink":{"dynamicRegistration":true,"tooltipSupport":true},"documentSymbol":{"dynamicRegistration":true,"hierarchicalDocumentSymbolSupport":true,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]},"tagSupport":{"valueSet":[1]}},"foldingRange":{"dynamicRegistration":true,"lineFoldingOnly":true,"rangeLimit":5000},"formatting":{"dynamicRegistration":true},"hover":{"contentFormat":["markdown","plaintext"],"dynamicRegistration":true},"implementation":{"dynamicRegistration":true,"linkSupport":true},"onTypeFormatting":{"dynamicRegistration":true},"publishDiagnostics":{"complexDiagnosticCodeSupport":true,"relatedInformation":true,"tagSupport":{"valueSet":[1,2]},"versionSupport":false},"rangeFormatting":{"dynamicRegistration":true},"references":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true,"prepareSupport":true},"selectionRange":{"dynamicRegistration":true},"semanticHighlightingCapabilities":{"semanticHighlighting":true},"semanticTokens":{"dynamicRegistration":true,"formats":["relative"],"requests":{"full":{"delta":true},"range":true},"tokenModifiers":["declaration","definition","readonly","static","deprecated","abstract","async","modification","documentation","defaultLibrary"],"tokenTypes":["namespace","type","class","enum","interface","struct","typeParameter","parameter","variable","property","enumMember","event","function","member","macro","keyword","modifier","comment","string","number","regexp","operator"]},"signatureHelp":{"contextSupport":true,"dynamicRegistration":true,"signatureInformation":{"activeParameterSupport":true,"documentationFormat":["markdown","plaintext"],"parameterInformation":{"labelOffsetSupport":true}}},"synchronization":{"didSave":true,"dynamicRegistration":true,"willSave":true,"willSaveWaitUntil":true},"typeDefinition":{"dynamicRegistration":true,"linkSupport":true}},"window":{"workDoneProgress":true},"workspace":{"applyEdit":true,"configuration":true,"didChangeConfiguration":{"dynamicRegistration":true},"didChangeWatchedFiles":{"dynamicRegistration":true},"executeCommand":{"dynamicRegistration":true},"symbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]},"tagSupport":{"valueSet":[1]}},"workspaceEdit":{"documentChanges":true,"failureHandling":"textOnlyTransactional","resourceOperations":["create","rename","delete"]},"workspaceFolders":true}},"clientInfo":{"name":"vscode","version":"1.51.1"},"initializationOptions":{"clangdFileStatus":true,"fallbackFlags":[]},"processId":53081,"rootPath":"/Users/kristian/Documents/Code/TrenchBroom","rootUri":"file:///Users/kristian/Documents/Code/TrenchBroom","trace":"off","workspaceFolders":[{"name":"TrenchBroom","uri":"file:///Users/kristian/Documents/Code/TrenchBroom"}]}}
I[19:53:48.315] <-- initialize(0)
I[19:53:48.315] Client supports legacy semanticHighlights notification and standard semanticTokens request, choosing the latter (no notifications).
V[19:53:48.315] Invoking /usr/bin/xcrun to find clang installation
I[19:53:48.316] --> reply:textDocument/codeAction(1) 602 ms, error: Task was cancelled.
V[19:53:48.316] >>> {"error":{"code":-32800,"message":"Request cancelled"},"id":1,"jsonrpc":"2.0"}
I[19:53:48.316] --> reply:textDocument/documentLink(2) 602 ms, error: Task was cancelled.
V[19:53:48.316] >>> {"error":{"code":-32800,"message":"Request cancelled"},"id":2,"jsonrpc":"2.0"}
V[19:53:48.317] ASTWorker rebuilding evicted AST to run SemanticHighlights: /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp version 1
V[19:53:48.324] Invoking /usr/bin/xcrun to find clang installation
I[19:53:48.332] --> reply:initialize(0) 16 ms
V[19:53:48.332] >>> {"id":0,"jsonrpc":"2.0","result":{"capabilities":{"codeActionProvider":{"codeActionKinds":["quickfix","refactor","info"]},"completionProvider":{"allCommitCharacters":[" ","\t","(",")","[","]","{","}","<",">",":",";",",","+","-","/","*","%","^","&","#","?",".","=","\"","'","|"],"resolveProvider":false,"triggerCharacters":[".","<",">",":","\"","/"]},"declarationProvider":true,"definitionProvider":true,"documentFormattingProvider":true,"documentHighlightProvider":true,"documentLinkProvider":{"resolveProvider":false},"documentOnTypeFormattingProvider":{"firstTriggerCharacter":"\n","moreTriggerCharacter":[]},"documentRangeFormattingProvider":true,"documentSymbolProvider":true,"executeCommandProvider":{"commands":["clangd.applyFix","clangd.applyTweak"]},"hoverProvider":true,"referencesProvider":true,"renameProvider":{"prepareProvider":true},"selectionRangeProvider":true,"semanticTokensProvider":{"full":{"delta":true},"legend":{"tokenModifiers":[],"tokenTypes":["variable","variable","parameter","function","member","function","member","variable","class","enum","enumConstant","type","dependent","dependent","namespace","typeParameter","concept","type","macro","comment"]},"range":false},"signatureHelpProvider":{"triggerCharacters":["(",","]},"textDocumentSync":{"change":2,"openClose":true,"save":true},"typeHierarchyProvider":true,"workspaceSymbolProvider":true},"serverInfo":{"name":"clangd","version":"clangd version 11.0.0 (https://github.com/llvm/llvm-project 176249bd6732a8044d457092ed932768724a6f06)"}}}
V[19:53:48.334] <<< {"jsonrpc":"2.0","method":"initialized","params":{}}
I[19:53:48.334] <-- initialized
V[19:53:48.335] <<< {"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"languageId":"cpp","text":"/*\n Copyright (C) 2010-2017 Kristian Duske\n\n This file is part of TrenchBroom.\n\n TrenchBroom is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n TrenchBroom is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with TrenchBroom. If not, see <http://www.gnu.org/licenses/>.\n */\n\n#include \"GameImpl.h\"\n\n#include \"Ensure.h\"\n#include \"Exceptions.h\"\n#include \"Logger.h\"\n#include \"Macros.h\"\n#include \"Assets/Palette.h\"\n#include \"Assets/EntityModel.h\"\n#include \"Assets/EntityDefinitionFileSpec.h\"\n#include \"IO/AseParser.h\"\n#include \"IO/BrushFaceReader.h\"\n#include \"IO/Bsp29Parser.h\"\n#include \"IO/DefParser.h\"\n#include \"IO/DiskIO.h\"\n#include \"IO/DkmParser.h\"\n#include \"IO/DiskFileSystem.h\"\n#include \"IO/EntParser.h\"\n#include \"IO/FgdParser.h\"\n#include \"IO/File.h\"\n#include \"IO/FileMatcher.h\"\n#include \"IO/GameConfigParser.h\"\n#include \"IO/IOUtils.h\"\n#include \"IO/MdlParser.h\"\n#include \"IO/Md2Parser.h\"\n#include \"IO/Md3Parser.h\"\n#include \"IO/MdxParser.h\"\n#include \"IO/NodeReader.h\"\n#include \"IO/NodeWriter.h\"\n#include \"IO/ObjParser.h\"\n#include \"IO/ObjSerializer.h\"\n#include \"IO/WorldReader.h\"\n#include \"IO/SimpleParserStatus.h\"\n#include \"IO/SystemPaths.h\"\n#include \"IO/TextureLoader.h\"\n#include \"Model/BrushBuilder.h\"\n#include \"Model/BrushError.h\"\n#include \"Model/BrushNode.h\"\n#include \"Model/Entity.h\"\n#include \"Model/EntityAttributes.h\"\n#include \"Model/ExportFormat.h\"\n#include \"Model/GameConfig.h\"\n#include \"Model/LayerNode.h\"\n#include \"Model/WorldNode.h\"\n\n#include <kdl/overload.h>\n#include <kdl/result.h>\n#include <kdl/string_compare.h>\n#include <kdl/string_format.h>\n#include <kdl/string_utils.h>\n#include <kdl/vector_utils.h>\n\n#include <vecmath/vec_io.h>\n\n#include <fstream>\n#include <string>\n#include <vector>\n\nnamespace TrenchBroom {\n namespace Model {\n GameImpl::GameImpl(GameConfig& config, const IO::Path& gamePath, Logger& logger) :\n m_config(config),\n m_gamePath(gamePath) {\n initializeFileSystem(logger);\n }\n\n void GameImpl::initializeFileSystem(Logger& logger) {\n m_fs.initialize(m_config, m_gamePath, m_additionalSearchPaths, logger);\n }\n\n const std::string& GameImpl::doGameName() const {\n return m_config.name();\n }\n\n IO::Path GameImpl::doGamePath() const {\n return m_gamePath;\n }\n\n void GameImpl::doSetGamePath(const IO::Path& gamePath, Logger& logger) {\n if (gamePath != m_gamePath) {\n m_gamePath = gamePath;\n initializeFileSystem(logger);\n }\n }\n\n void GameImpl::doSetAdditionalSearchPaths(const std::vector<IO::Path>& searchPaths, Logger& logger) {\n if (searchPaths != m_additionalSearchPaths) {\n m_additionalSearchPaths = searchPaths;\n initializeFileSystem(logger);\n }\n }\n\n Game::PathErrors GameImpl::doCheckAdditionalSearchPaths(const std::vector<IO::Path>& searchPaths) const {\n PathErrors result;\n for (const auto& searchPath : searchPaths) {\n const auto absPath = m_gamePath + searchPath;\n if (!absPath.isAbsolute() || !IO::Disk::directoryExists(absPath)) {\n result.insert(std::make_pair(searchPath, \"Directory not found: '\" + searchPath.asString() + \"'\"));\n }\n }\n return result;\n }\n\n const CompilationConfig& GameImpl::doCompilationConfig() {\n return m_config.compilationConfig();\n }\n\n size_t GameImpl::doMaxPropertyLength() const {\n return m_config.maxPropertyLength();\n }\n\n std::optional<vm::bbox3> GameImpl::doSoftMapBounds() const {\n return m_config.softMapBounds();\n }\n\n Game::SoftMapBounds GameImpl::doExtractSoftMapBounds(const AttributableNode& node) const {\n if (!node.entity().hasAttribute(AttributeNames::SoftMapBounds)) {\n // Not set in map -> use Game value\n return {SoftMapBoundsType::Game, doSoftMapBounds()};\n }\n\n if (const auto* mapValue = node.entity().attribute(AttributeNames::SoftMapBounds); mapValue && *mapValue != AttributeValues::NoSoftMapBounds) {\n return {SoftMapBoundsType::Map, IO::parseSoftMapBoundsString(*mapValue)};\n } else {\n return {SoftMapBoundsType::Map, std::nullopt};\n }\n }\n\n const std::vector<SmartTag>& GameImpl::doSmartTags() const {\n return m_config.smartTags();\n }\n\n std::unique_ptr<WorldNode> GameImpl::doNewMap(const MapFormat format, const vm::bbox3& worldBounds, Logger& logger) const {\n const auto initialMapFilePath = m_config.findInitialMap(formatName(format));\n if (!initialMapFilePath.isEmpty() && IO::Disk::fileExists(initialMapFilePath)) {\n return doLoadMap(format, worldBounds, initialMapFilePath, logger);\n } else {\n auto worldEntity = Model::Entity();\n if (format == MapFormat::Valve || format == MapFormat::Quake2_Valve || format == MapFormat::Quake3_Valve) {\n worldEntity.addOrUpdateAttribute(AttributeNames::ValveVersion, \"220\");\n }\n\n auto worldNode = std::make_unique<WorldNode>(std::move(worldEntity), format);\n\n const Model::BrushBuilder builder(worldNode.get(), worldBounds, defaultFaceAttribs());\n builder.createCuboid(vm::vec3(128.0, 128.0, 32.0), Model::BrushFaceAttributes::NoTextureName).\n visit(kdl::overload(\n [&](Brush&& b) {\n worldNode->defaultLayer()->addChild(worldNode->createBrush(std::move(b)));\n },\n [&](const Model::BrushError e) {\n logger.error() << \"Could not create default brush: \" << e;\n }\n ));\n\n return worldNode;\n }\n }\n\n std::unique_ptr<WorldNode> GameImpl::doLoadMap(const MapFormat format, const vm::bbox3& worldBounds, const IO::Path& path, Logger& logger) const {\n IO::SimpleParserStatus parserStatus(logger);\n auto file = IO::Disk::openFile(IO::Disk::fixPath(path));\n auto fileReader = file->reader().buffer();\n IO::WorldReader worldReader(fileReader.stringView());\n return worldReader.read(format, worldBounds, parserStatus);\n }\n\n void GameImpl::doWriteMap(WorldNode& world, const IO::Path& path, const bool exporting) const {\n const auto mapFormatName = formatName(world.format());\n\n std::ofstream file = openPathAsOutputStream(path);\n if (!file) {\n throw FileSystemException(\"Cannot open file: \" + path.asString());\n }\n IO::writeGameComment(file, gameName(), mapFormatName);\n\n IO::NodeWriter writer(world, file);\n writer.setExporting(exporting);\n writer.writeMap();\n }\n\n void GameImpl::doWriteMap(WorldNode& world, const IO::Path& path) const {\n doWriteMap(world, path, false);\n }\n\n void GameImpl::doExportMap(WorldNode& world, const Model::ExportFormat format, const IO::Path& path) const {\n switch (format) {\n case Model::ExportFormat::WavefrontObj: {\n IO::NodeWriter writer(world, std::make_unique<IO::ObjFileSerializer>(path));\n writer.setExporting(true);\n writer.writeMap();\n break;\n }\n case Model::ExportFormat::Map:\n doWriteMap(world, path, true);\n break;\n }\n }\n\n std::vector<Node*> GameImpl::doParseNodes(const std::string& str, WorldNode& world, const vm::bbox3& worldBounds, Logger& logger) const {\n IO::SimpleParserStatus parserStatus(logger);\n return IO::NodeReader::read(str, world, worldBounds, parserStatus);\n }\n\n std::vector<BrushFace> GameImpl::doParseBrushFaces(const std::string& str, WorldNode& world, const vm::bbox3& worldBounds, Logger& logger) const {\n IO::SimpleParserStatus parserStatus(logger);\n IO::BrushFaceReader reader(str, world);\n return reader.read(worldBounds, parserStatus);\n }\n\n void GameImpl::doWriteNodesToStream(WorldNode& world, const std::vector<Node*>& nodes, std::ostream& stream) const {\n IO::NodeWriter writer(world, stream);\n writer.writeNodes(nodes);\n }\n\n void GameImpl::doWriteBrushFacesToStream(WorldNode& world, const std::vector<BrushFace>& faces, std::ostream& stream) const {\n IO::NodeWriter writer(world, stream);\n writer.writeBrushFaces(faces);\n }\n\n Game::TexturePackageType GameImpl::doTexturePackageType() const {\n using Model::GameConfig;\n switch (m_config.textureConfig().package.type) {\n case TexturePackageConfig::PT_File:\n return TexturePackageType::File;\n case TexturePackageConfig::PT_Directory:\n return TexturePackageType::Directory;\n case TexturePackageConfig::PT_Unset:\n throw GameException(\"Texture package type is not set in game configuration\");\n switchDefault()\n }\n }\n\n void GameImpl::doLoadTextureCollections(AttributableNode& node, const IO::Path& documentPath, Assets::TextureManager& textureManager, Logger& logger) const {\n const auto paths = extractTextureCollections(node);\n\n const auto fileSearchPaths = textureCollectionSearchPaths(documentPath);\n IO::TextureLoader textureLoader(m_fs, fileSearchPaths, m_config.textureConfig(), logger);\n textureLoader.loadTextures(paths, textureManager);\n }\n\n std::vector<IO::Path> GameImpl::textureCollectionSearchPaths(const IO::Path& documentPath) const {\n std::vector<IO::Path> result;\n\n // Search for assets relative to the map file.\n result.push_back(documentPath);\n\n // Search for assets relative to the location of the game.\n result.push_back(m_gamePath);\n\n // Search for assets relative to the application itself.\n result.push_back(IO::SystemPaths::appDirectory());\n\n return result;\n }\n\n bool GameImpl::doIsTextureCollection(const IO::Path& path) const {\n const auto& packageConfig = m_config.textureConfig().package;\n switch (packageConfig.type) {\n case TexturePackageConfig::PT_File:\n return path.hasExtension(packageConfig.fileFormat.extensions, false);\n case TexturePackageConfig::PT_Directory:\n case TexturePackageConfig::PT_Unset:\n return false;\n switchDefault()\n }\n }\n\n std::vector<IO::Path> GameImpl::doFindTextureCollections() const {\n try {\n const auto& searchPath = m_config.textureConfig().package.rootDirectory;\n if (!searchPath.isEmpty() && m_fs.directoryExists(searchPath)) {\n return kdl::vec_concat(std::vector<IO::Path>({searchPath}), m_fs.findItemsRecursively(searchPath, IO::FileTypeMatcher(false, true)));\n }\n return std::vector<IO::Path>();\n } catch (FileSystemException& e) {\n throw GameException(\"Could not find texture collections: \" + std::string(e.what()));\n }\n }\n\n std::vector<std::string> GameImpl::doFileTextureCollectionExtensions() const {\n return m_config.textureConfig().package.fileFormat.extensions;\n }\n\n std::vector<IO::Path> GameImpl::doExtractTextureCollections(const AttributableNode& node) const {\n const auto& property = m_config.textureConfig().attribute;\n if (property.empty()) {\n return {};\n }\n\n const auto* pathsValue = node.entity().attribute(property);\n if (!pathsValue) {\n return {};\n }\n \n return IO::Path::asPaths(kdl::str_split(*pathsValue, \";\"));\n }\n\n void GameImpl::doUpdateTextureCollections(AttributableNode& node, const std::vector<IO::Path>& paths) const {\n const auto& attribute = m_config.textureConfig().attribute;\n if (attribute.empty()) {\n return;\n }\n\n const auto value = kdl::str_join(IO::Path::asStrings(paths, \"/\"), \";\");\n auto entity = node.entity();\n entity.addOrUpdateAttribute(attribute, value);\n node.setEntity(std::move(entity));\n }\n\n void GameImpl::doReloadShaders() {\n m_fs.reloadShaders();\n }\n\n bool GameImpl::doIsEntityDefinitionFile(const IO::Path& path) const {\n const auto extension = path.extension();\n if (kdl::ci::str_is_equal(\"fgd\", extension)) {\n return true;\n } else if (kdl::ci::str_is_equal(\"def\", extension)) {\n return true;\n } else if (kdl::ci::str_is_equal(\"ent\", extension)) {\n return true;\n } else {\n return false;\n }\n }\n\n std::vector<Assets::EntityDefinition*> GameImpl::doLoadEntityDefinitions(IO::ParserStatus& status, const IO::Path& path) const {\n const auto extension = path.extension();\n const auto& defaultColor = m_config.entityConfig().defaultColor;\n\n if (kdl::ci::str_is_equal(\"fgd\", extension)) {\n auto file = IO::Disk::openFile(IO::Disk::fixPath(path));\n auto reader = file->reader().buffer();\n IO::FgdParser parser(reader.stringView(), defaultColor, file->path());\n return parser.parseDefinitions(status);\n } else if (kdl::ci::str_is_equal(\"def\", extension)) {\n auto file = IO::Disk::openFile(IO::Disk::fixPath(path));\n auto reader = file->reader().buffer();\n IO::DefParser parser(reader.stringView(), defaultColor);\n return parser.parseDefinitions(status);\n } else if (kdl::ci::str_is_equal(\"ent\", extension)) {\n auto file = IO::Disk::openFile(IO::Disk::fixPath(path));\n auto reader = file->reader().buffer();\n IO::EntParser parser(reader.stringView(), defaultColor);\n return parser.parseDefinitions(status);\n } else {\n throw GameException(\"Unknown entity definition format: '\" + path.asString() + \"'\");\n }\n }\n\n std::vector<Assets::EntityDefinitionFileSpec> GameImpl::doAllEntityDefinitionFiles() const {\n const auto paths = m_config.entityConfig().defFilePaths;\n const auto count = paths.size();\n\n std::vector<Assets::EntityDefinitionFileSpec> result;\n result.reserve(count);\n\n for (const auto& path : paths) {\n result.push_back(Assets::EntityDefinitionFileSpec::builtin(path));\n }\n\n return result;\n }\n\n Assets::EntityDefinitionFileSpec GameImpl::doExtractEntityDefinitionFile(const AttributableNode& node) const {\n if (const auto* defValue = node.entity().attribute(AttributeNames::EntityDefinitions)) {\n return Assets::EntityDefinitionFileSpec::parse(*defValue);\n } else {\n return defaultEntityDefinitionFile();\n }\n }\n\n Assets::EntityDefinitionFileSpec GameImpl::defaultEntityDefinitionFile() const {\n const auto paths = m_config.entityConfig().defFilePaths;\n if (paths.empty()) {\n throw GameException(\"No entity definition files found for game '\" + gameName() + \"'\");\n }\n\n const auto& path = paths.front();\n return Assets::EntityDefinitionFileSpec::builtin(path);\n }\n\n IO::Path GameImpl::doFindEntityDefinitionFile(const Assets::EntityDefinitionFileSpec& spec, const std::vector<IO::Path>& searchPaths) const {\n if (!spec.valid()) {\n throw GameException(\"Invalid entity definition file spec\");\n }\n\n const auto& path = spec.path();\n if (spec.builtin()) {\n return m_config.findConfigFile(path);\n } else {\n if (path.isAbsolute()) {\n return path;\n } else {\n return IO::Disk::resolvePath(searchPaths, path);\n }\n }\n }\n\n std::unique_ptr<Assets::EntityModel> GameImpl::doInitializeModel(const IO::Path& path, Logger& logger) const {\n try {\n auto file = m_fs.openFile(path);\n ensure(file != nullptr, \"file is null\");\n\n const auto modelName = path.lastComponent().asString();\n const auto extension = kdl::str_to_lower(path.extension());\n const auto supported = m_config.entityConfig().modelFormats;\n\n if (extension == \"mdl\" && kdl::vec_contains(supported, \"mdl\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::MdlParser parser(modelName, std::begin(reader), std::end(reader), palette);\n return parser.initializeModel(logger);\n } else if (extension == \"md2\" && kdl::vec_contains(supported, \"md2\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::Md2Parser parser(modelName, std::begin(reader), std::end(reader), palette, m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"md3\" && kdl::vec_contains(supported, \"md3\")) {\n auto reader = file->reader().buffer();\n IO::Md3Parser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"mdx\" && kdl::vec_contains(supported, \"mdx\")) {\n auto reader = file->reader().buffer();\n IO::MdxParser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"bsp\" && kdl::vec_contains(supported, \"bsp\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::Bsp29Parser parser(modelName, std::begin(reader), std::end(reader), palette, m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"dkm\" && kdl::vec_contains(supported, \"dkm\")) {\n auto reader = file->reader().buffer();\n IO::DkmParser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"ase\" && kdl::vec_contains(supported, \"ase\")) {\n auto reader = file->reader().buffer();\n IO::AseParser parser(modelName, reader.stringView(), m_fs);\n return parser.initializeModel(logger);\n } else if (extension == \"obj\" && kdl::vec_contains(supported, \"obj_neverball\")) {\n auto reader = file->reader().buffer();\n // has to be the whole path for implicit textures!\n IO::NvObjParser parser(path, std::begin(reader), std::end(reader), m_fs);\n return parser.initializeModel(logger);\n } else {\n throw GameException(\"Unsupported model format '\" + path.asString() + \"'\");\n }\n } catch (const FileSystemException& e) {\n throw GameException(\"Could not load model \" + path.asString() + \": \" + std::string(e.what()));\n } catch (const AssetException& e) {\n throw GameException(\"Could not load model \" + path.asString() + \": \" + std::string(e.what()));\n } catch (const ParserException& e) {\n throw GameException(\"Could not load model \" + path.asString() + \": \" + std::string(e.what()));\n }\n }\n\n void GameImpl::doLoadFrame(const IO::Path& path, size_t frameIndex, Assets::EntityModel& model, Logger& logger) const {\n try {\n ensure(model.frame(frameIndex) != nullptr, \"invalid frame index\");\n ensure(!model.frame(frameIndex)->loaded(), \"frame already loaded\");\n\n const auto file = m_fs.openFile(path);\n ensure(file != nullptr, \"file is null\");\n\n const auto modelName = path.lastComponent().asString();\n const auto extension = kdl::str_to_lower(path.extension());\n const auto supported = m_config.entityConfig().modelFormats;\n\n if (extension == \"mdl\" && kdl::vec_contains(supported, \"mdl\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::MdlParser parser(modelName, std::begin(reader), std::end(reader), palette);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"md2\" && kdl::vec_contains(supported, \"md2\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::Md2Parser parser(modelName, std::begin(reader), std::end(reader), palette, m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"md3\" && kdl::vec_contains(supported, \"md3\")) {\n auto reader = file->reader().buffer();\n IO::Md3Parser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"mdx\" && kdl::vec_contains(supported, \"mdx\")) {\n auto reader = file->reader().buffer();\n IO::MdxParser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"bsp\" && kdl::vec_contains(supported, \"bsp\")) {\n const auto palette = loadTexturePalette();\n auto reader = file->reader().buffer();\n IO::Bsp29Parser parser(modelName, std::begin(reader), std::end(reader), palette, m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"dkm\" && kdl::vec_contains(supported, \"dkm\")) {\n auto reader = file->reader().buffer();\n IO::DkmParser parser(modelName, std::begin(reader), std::end(reader), m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"ase\" && kdl::vec_contains(supported, \"ase\")) {\n auto reader = file->reader().buffer();\n IO::AseParser parser(modelName, reader.stringView(), m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else if (extension == \"obj\" && kdl::vec_contains(supported, \"obj_neverball\")) {\n auto reader = file->reader().buffer();\n // has to be the whole path for implicit textures!\n IO::NvObjParser parser(path, std::begin(reader), std::end(reader), m_fs);\n parser.loadFrame(frameIndex, model, logger);\n } else {\n throw GameException(\"Unsupported model format '\" + path.asString() + \"'\");\n }\n } catch (FileSystemException& e) {\n throw GameException(\"Could not load model \" + path.asString() + \": \" + std::string(e.what()));\n } catch (AssetException& e) {\n throw GameException(\"Could not load model \" + path.asString() + \": \" + std::string(e.what()));\n }\n }\n\n Assets::Palette GameImpl::loadTexturePalette() const {\n const auto& path = m_config.textureConfig().palette;\n return Assets::Palette::loadFile(m_fs, path);\n }\n\n std::vector<std::string> GameImpl::doAvailableMods() const {\n std::vector<std::string> result;\n if (m_gamePath.isEmpty() || !IO::Disk::directoryExists(m_gamePath)) {\n return result;\n }\n\n const auto& defaultMod = m_config.fileSystemConfig().searchPath.lastComponent().asString();\n const IO::DiskFileSystem fs(m_gamePath);\n const auto subDirs = fs.findItems(IO::Path(\"\"), IO::FileTypeMatcher(false, true));\n for (size_t i = 0; i < subDirs.size(); ++i) {\n const std::string mod = subDirs[i].lastComponent().asString();\n if (!kdl::ci::str_is_equal(mod, defaultMod)) {\n result.push_back(mod);\n }\n }\n return result;\n }\n\n std::vector<std::string> GameImpl::doExtractEnabledMods(const AttributableNode& node) const {\n if (const auto* modStr = node.entity().attribute(AttributeNames::Mods)) {\n return kdl::str_split(*modStr, \";\");\n } else {\n return {};\n }\n }\n\n std::string GameImpl::doDefaultMod() const {\n return m_config.fileSystemConfig().searchPath.asString();\n }\n\n const FlagsConfig& GameImpl::doSurfaceFlags() const {\n return m_config.faceAttribsConfig().surfaceFlags;\n }\n\n const FlagsConfig& GameImpl::doContentFlags() const {\n return m_config.faceAttribsConfig().contentFlags;\n }\n\n const BrushFaceAttributes& GameImpl::doDefaultFaceAttribs() const {\n return m_config.faceAttribsConfig().defaults;\n }\n\n const std::vector<CompilationTool>& GameImpl::doCompilationTools() const {\n return m_config.compilationTools();\n }\n\n void GameImpl::writeLongAttribute(AttributableNode& node, const std::string& baseName, const std::string& value, const size_t maxLength) const {\n auto entity = node.entity();\n entity.removeNumberedAttribute(baseName);\n\n std::stringstream nameStr;\n for (size_t i = 0; i <= value.size() / maxLength; ++i) {\n nameStr.str(\"\");\n nameStr << baseName << i+1;\n entity.addOrUpdateAttribute(nameStr.str(), value.substr(i * maxLength, maxLength));\n }\n\n node.setEntity(std::move(entity));\n }\n\n std::string GameImpl::readLongAttribute(const AttributableNode& node, const std::string& baseName) const {\n size_t index = 1;\n std::stringstream nameStr;\n std::stringstream valueStr;\n nameStr << baseName << index;\n\n const auto& entity = node.entity();\n while (entity.hasAttribute(nameStr.str())) {\n if (const auto* value = entity.attribute(nameStr.str())) {\n valueStr << *value;\n }\n nameStr.str(\"\");\n nameStr << baseName << ++index;\n }\n\n return valueStr.str();\n }\n }\n}\n","uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp","version":1}}}
I[19:53:48.335] <-- textDocument/didOpen
V[19:53:48.339] <<< {"id":1,"jsonrpc":"2.0","method":"textDocument/codeAction","params":{"context":{"diagnostics":[]},"range":{"end":{"character":60,"line":252},"start":{"character":59,"line":252}},"textDocument":{"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp"}}}
I[19:53:48.339] <-- textDocument/codeAction(1)
V[19:53:48.339] <<< {"id":2,"jsonrpc":"2.0","method":"textDocument/documentLink","params":{"textDocument":{"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp"}}}
I[19:53:48.339] <-- textDocument/documentLink(2)
I[19:53:48.341] Loaded compilation database from /Users/kristian/Documents/Code/TrenchBroom
I[19:53:48.346] Loaded compilation database from /Users/kristian/Documents/Code/TrenchBroom/build
I[19:53:48.348] --> window/workDoneProgress/create(0)
V[19:53:48.348] >>> {"id":0,"jsonrpc":"2.0","method":"window/workDoneProgress/create","params":{"token":"backgroundIndexProgress"}}
I[19:53:48.348] Enqueueing 609 commands for indexing
V[19:53:48.348] <<< {"id":0,"jsonrpc":"2.0","result":null}
I[19:53:48.348] <-- reply(0)
I[19:53:48.348] ASTWorker building file /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp version 1 with command
[/Users/kristian/Documents/Code/TrenchBroom/build]
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ --driver-mode=g++ -DFMT_LOCALE -DGLEW_STATIC -DGL_SILENCE_DEPRECATION -DQT_CORE_LIB -DQT_GUI_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -Icommon/common_autogen/include -I../common/src -Icommon -I../lib/kdl/include -I../lib/vecmath/include -I../lib/fmt/include -isystem ../lib/tinyxml2/include -isystem ../lib/glew/include -isystem ../lib/miniz/include -isystem ../lib/BinaryLibs/freeimage/include/win32 -isystem ../lib/freetype/include -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/System/Library/Frameworks -iframework /opt/local/libexec/qt5/lib -isystem /opt/local/libexec/qt5/lib/QtWidgets.framework/Headers -isystem /opt/local/libexec/qt5/lib/QtGui.framework/Headers -isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/System/Library/Frameworks/OpenGL.framework/Headers -isystem /opt/local/libexec/qt5/lib/QtCore.framework/Headers -isystem /opt/local/libexec/qt5/./mkspecs/macx-clang -isystem /opt/local/libexec/qt5/lib/QtSvg.framework/Headers -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk -mmacosx-version-min=10.14 -Wall -Wextra -Wconversion -Wshadow-all -pedantic -Wno-global-constructors -Wno-exit-time-destructors -Wno-padded -Wno-format-nonliteral -Wno-used-but-marked-unused -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++98-compat-bind-to-temporary-copy -Wno-weak-vtables -Wno-weak-template-vtables -Wno-missing-braces -Wno-redundant-parens -Wno-pragma-system-header-outside-header -Wno-float-equal -fPIC -std=gnu++17 -Winvalid-pch -Xclang -include-pch -Xclang /Users/kristian/Documents/Code/TrenchBroom/build/common/CMakeFiles/common.dir/cmake_pch.hxx.pch -Xclang -include -Xclang /Users/kristian/Documents/Code/TrenchBroom/build/common/CMakeFiles/common.dir/cmake_pch.hxx -o common/CMakeFiles/common.dir/src/Model/GameImpl.cpp.o -c /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp -fsyntax-only -resource-dir=/Users/kristian/.bin/clangd_11.0.0/lib/clang/11.0.0
I[19:53:48.348] --> $/progress
V[19:53:48.348] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"begin","percentage":0,"title":"indexing"}}}
I[19:53:48.348] --> $/progress
V[19:53:48.348] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/1","percentage":0}}}
V[19:53:48.350] Driver produced command: cc1 -cc1 -triple x86_64-apple-macosx10.14.0 -Wundef-prefix=TARGET_OS_ -Werror=undef-prefix -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -fsyntax-only -disable-free -disable-llvm-verifier -discard-value-names -main-file-name GameImpl.cpp -mrelocation-model pic -pic-level 2 -mframe-pointer=all -fno-rounding-math -munwind-tables -target-sdk-version=11.0 -fcompatibility-qualified-id-block-type-checking -target-cpu penryn -debug-info-kind=standalone -dwarf-version=4 -debugger-tuning=lldb -target-linker-version 609 -resource-dir /Users/kristian/.bin/clangd_11.0.0/lib/clang/11.0.0 -isystem ../lib/tinyxml2/include -isystem ../lib/glew/include -isystem ../lib/miniz/include -isystem ../lib/BinaryLibs/freeimage/include/win32 -isystem ../lib/freetype/include -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/System/Library/Frameworks -iframework /opt/local/libexec/qt5/lib -isystem /opt/local/libexec/qt5/lib/QtWidgets.framework/Headers -isystem /opt/local/libexec/qt5/lib/QtGui.framework/Headers -isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/System/Library/Frameworks/OpenGL.framework/Headers -isystem /opt/local/libexec/qt5/lib/QtCore.framework/Headers -isystem /opt/local/libexec/qt5/./mkspecs/macx-clang -isystem /opt/local/libexec/qt5/lib/QtSvg.framework/Headers -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk -D FMT_LOCALE -D GLEW_STATIC -D GL_SILENCE_DEPRECATION -D QT_CORE_LIB -D QT_GUI_LIB -D QT_SVG_LIB -D QT_WIDGETS_LIB -I common/common_autogen/include -I ../common/src -I common -I ../lib/kdl/include -I ../lib/vecmath/include -I ../lib/fmt/include -stdlib=libc++ -internal-isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1 -internal-isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/usr/include/c++/v1 -internal-isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/usr/local/include -internal-isystem /Users/kristian/.bin/clangd_11.0.0/lib/clang/11.0.0/include -internal-externc-isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/usr/include -Wall -Wextra -Wconversion -Wshadow-all -Wno-global-constructors -Wno-exit-time-destructors -Wno-padded -Wno-format-nonliteral -Wno-used-but-marked-unused -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++98-compat-bind-to-temporary-copy -Wno-weak-vtables -Wno-weak-template-vtables -Wno-missing-braces -Wno-redundant-parens -Wno-pragma-system-header-outside-header -Wno-float-equal -Winvalid-pch -pedantic -std=gnu++17 -fdeprecated-macro -fdebug-compilation-dir /Users/kristian/Documents/Code/TrenchBroom/build -ferror-limit 19 -stack-protector 1 -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -fmax-type-align=16 -include-pch /Users/kristian/Documents/Code/TrenchBroom/build/common/CMakeFiles/common.dir/cmake_pch.hxx.pch -include /Users/kristian/Documents/Code/TrenchBroom/build/common/CMakeFiles/common.dir/cmake_pch.hxx -x c++ /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp
I[19:53:48.350] --> textDocument/clangd.fileStatus
V[19:53:48.350] >>> {"jsonrpc":"2.0","method":"textDocument/clangd.fileStatus","params":{"state":"parsing includes,running Update (1)","uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp"}}
V[19:53:48.350] Building first preamble for /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp version 1
V[19:53:48.441] Build dynamic index for header symbols with estimated memory usage of 28555434 bytes
V[19:53:48.462] Built preamble of size 29003900 for file /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp version 1
I[19:53:48.535] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/Preferences.cpp (15384 symbols, 69325 refs, 389 files)
I[19:53:48.572] --> $/progress
V[19:53:48.572] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"2/28","percentage":7.1428571428571432}}}
I[19:53:48.572] --> $/progress
V[19:53:48.572] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"2/28","percentage":7.1428571428571432}}}
V[19:53:48.573] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp (digest:=D42E9E635B364083)
I[19:53:48.632] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameConfig.cpp (15368 symbols, 69054 refs, 403 files)
V[19:53:48.640] <<< {"id":3,"jsonrpc":"2.0","method":"textDocument/semanticTokens/full","params":{"textDocument":{"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp"}}}
I[19:53:48.640] <-- textDocument/semanticTokens/full(3)
I[19:53:48.658] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GroupNode.cpp (15576 symbols, 69189 refs, 427 files)
I[19:53:48.663] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Game.cpp (15603 symbols, 69350 refs, 421 files)
I[19:53:48.670] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/LayerNode.cpp (15610 symbols, 69231 refs, 422 files)
I[19:53:48.675] --> $/progress
V[19:53:48.675] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"3/28","percentage":10.714285714285714}}}
I[19:53:48.675] --> $/progress
V[19:53:48.675] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"3/28","percentage":10.714285714285714}}}
V[19:53:48.676] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Object.cpp (digest:=4539BC560723084D)
I[19:53:48.682] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/NodeCollection.cpp (15607 symbols, 69155 refs, 417 files)
I[19:53:48.701] --> $/progress
V[19:53:48.702] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"4/28","percentage":14.285714285714286}}}
I[19:53:48.702] --> $/progress
V[19:53:48.702] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"4/28","percentage":14.285714285714286}}}
V[19:53:48.702] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/IO/NodeSerializer.cpp (digest:=A8AAE9B654C75BC3)
I[19:53:48.704] --> $/progress
V[19:53:48.704] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"5/28","percentage":17.857142857142858}}}
I[19:53:48.704] --> $/progress
V[19:53:48.704] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"5/28","percentage":17.857142857142858}}}
V[19:53:48.705] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/IO/GameConfigParser.cpp (digest:=F02BC135E846223D)
I[19:53:48.712] --> $/progress
V[19:53:48.712] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"6/28","percentage":21.428571428571427}}}
I[19:53:48.712] --> $/progress
V[19:53:48.712] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"6/28","percentage":21.428571428571427}}}
V[19:53:48.713] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/View/GetVersion.cpp (digest:=D3D5E8340836AC8F)
I[19:53:48.727] --> $/progress
V[19:53:48.727] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"7/28","percentage":25}}}
I[19:53:48.727] --> $/progress
V[19:53:48.728] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"7/28","percentage":25}}}
V[19:53:48.728] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameFactory.cpp (digest:=A5BD4890D7AF279B)
V[19:53:48.788] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.h:53:92:non-virtual member function marked 'override' hides virtual member function
V[19:53:48.788] Ignored diagnostic. ../common/src/Model/Game.h:144:35:hidden overloaded virtual function 'TrenchBroom::Model::Game::doExtractSoftMapBounds' declared here: type mismatch at 1st parameter ('const TrenchBroom::Model::Entity &' vs 'const TrenchBroom::Model::AttributableNode &')
V[19:53:48.789] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.h:73:159:non-virtual member function marked 'override' hides virtual member function
V[19:53:48.789] Ignored diagnostic. ../common/src/Model/Game.h:159:26:hidden overloaded virtual function 'TrenchBroom::Model::Game::doLoadTextureCollections' declared here: type mismatch at 1st parameter ('const TrenchBroom::Model::Entity &' vs 'TrenchBroom::Model::AttributableNode &')
V[19:53:48.789] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.h:77:99:non-virtual member function marked 'override' hides virtual member function
V[19:53:48.789] Ignored diagnostic. ../common/src/Model/Game.h:163:43:hidden overloaded virtual function 'TrenchBroom::Model::Game::doExtractTextureCollections' declared here: type mismatch at 1st parameter ('const TrenchBroom::Model::Entity &' vs 'const TrenchBroom::Model::AttributableNode &')
V[19:53:48.789] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.h:78:111:non-virtual member function marked 'override' hides virtual member function
V[19:53:48.789] Ignored diagnostic. ../common/src/Model/Game.h:164:26:hidden overloaded virtual function 'TrenchBroom::Model::Game::doUpdateTextureCollections' declared here: type mismatch at 1st parameter ('TrenchBroom::Model::Entity &' vs 'TrenchBroom::Model::AttributableNode &')
V[19:53:48.789] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.h:83:112:non-virtual member function marked 'override' hides virtual member function
V[19:53:48.789] Ignored diagnostic. ../common/src/Model/Game.h:169:54:hidden overloaded virtual function 'TrenchBroom::Model::Game::doExtractEntityDefinitionFile' declared here: type mismatch at 1st parameter ('const TrenchBroom::Model::Entity &' vs 'const TrenchBroom::Model::AttributableNode &')
V[19:53:48.789] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.h:87:95:non-virtual member function marked 'override' hides virtual member function
V[19:53:48.789] Ignored diagnostic. ../common/src/Model/Game.h:173:46:hidden overloaded virtual function 'TrenchBroom::Model::Game::doExtractEnabledMods' declared here: type mismatch at 1st parameter ('const TrenchBroom::Model::Entity &' vs 'const TrenchBroom::Model::AttributableNode &')
V[19:53:48.809] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.cpp:144:75:no viable conversion from 'TrenchBroom::Model::AttributableNode' to 'const TrenchBroom::Model::Entity'
V[19:53:48.809] Ignored diagnostic. ../common/src/Model/Entity.h:88:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::AttributableNode' to 'const TrenchBroom::Model::Entity &' for 1st argument
V[19:53:48.809] Ignored diagnostic. ../common/src/Model/Entity.h:89:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::AttributableNode' to 'TrenchBroom::Model::Entity &&' for 1st argument
V[19:53:48.809] Ignored diagnostic. ../common/src/Model/Entity.h:85:22:explicit constructor is not a candidate
V[19:53:48.809] Ignored diagnostic. ../common/src/Model/Entity.h:86:22:explicit constructor is not a candidate
V[19:53:48.809] Ignored diagnostic. ../common/src/Model/Game.h:116:75:passing argument to parameter 'entity' here
V[19:53:48.822] BackgroundIndex: building version 1 after loading index from disk
V[19:53:48.842] BackgroundIndex: serving version 1 (85154579 bytes)
E[19:53:48.847] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/ChangeBrushFaceAttributesCommand.h to validate stored index: No such file or directory
E[19:53:48.860] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/CopyTexCoordSystemFromFaceCommand.h to validate stored index: No such file or directory
E[19:53:48.863] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/RotateTexturesCommand.h to validate stored index: No such file or directory
E[19:53:48.869] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/ChangeEntityAttributesCommand.h to validate stored index: No such file or directory
E[19:53:48.871] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/ShearTexturesCommand.h to validate stored index: No such file or directory
E[19:53:48.892] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/ResizeBrushesCommand.h to validate stored index: No such file or directory
E[19:53:48.893] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/ConvertEntityColorCommand.h to validate stored index: No such file or directory
E[19:53:48.896] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/TransformObjectsCommand.h to validate stored index: No such file or directory
E[19:53:48.898] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MoveTexturesCommand.h to validate stored index: No such file or directory
E[19:53:48.907] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/UpdateEntitySpawnflagCommand.h to validate stored index: No such file or directory
I[19:53:48.916] --> $/progress
V[19:53:48.916] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/28","percentage":0}}}
I[19:53:48.916] --> $/progress
V[19:53:48.916] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/28","percentage":0}}}
I[19:53:48.916] --> $/progress
V[19:53:48.916] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/28","percentage":0}}}
I[19:53:48.916] --> $/progress
V[19:53:48.916] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/28","percentage":0}}}
I[19:53:48.916] --> $/progress
V[19:53:48.916] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/28","percentage":0}}}
I[19:53:48.916] --> $/progress
V[19:53:48.916] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/28","percentage":0}}}
I[19:53:48.916] --> $/progress
V[19:53:48.916] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/28","percentage":0}}}
I[19:53:48.916] --> $/progress
V[19:53:48.916] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/28","percentage":0}}}
I[19:53:48.916] --> $/progress
V[19:53:48.916] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/28","percentage":0}}}
I[19:53:48.916] --> $/progress
V[19:53:48.916] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"1/28","percentage":3.5714285714285716}}}
I[19:53:48.916] --> $/progress
V[19:53:48.916] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"1/28","percentage":3.5714285714285716}}}
I[19:53:48.916] --> $/progress
V[19:53:48.916] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"1/28","percentage":3.5714285714285716}}}
V[19:53:48.917] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/LayerNode.cpp (digest:=EAE9AAF9548B6BB7)
V[19:53:48.917] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/test/src/IO/EntityModelTest.cpp (digest:=FBDEA38537A9C654)
V[19:53:48.918] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/View/CompilationVariables.cpp (digest:=8DC6F90222B98358)
V[19:53:48.918] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/EditorContext.cpp (digest:=D6A3313B19B843C0)
V[19:53:48.918] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Preferences.cpp (digest:=B3D000225E81ACCD)
V[19:53:48.920] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapDocumentCommandFacade.cpp (digest:=7363A6F578FD620A)
V[19:53:48.920] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameFactory.cpp (digest:=A5BD4890D7AF279B)
V[19:53:48.921] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/ModelUtils.cpp (digest:=77D95B991459BB26)
V[19:53:48.922] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapViewBase.cpp (digest:=AFDD0DF8795B2235)
V[19:53:48.924] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.cpp (digest:=B602EF7B4016021F)
I[19:53:49.174] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/test/src/IO/GameConfigParserTest.cpp (15415 symbols, 87675 refs, 437 files)
V[19:53:49.240] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapDocumentCommandFacade.cpp:642:46:non-const lvalue reference to type 'TrenchBroom::Model::Entity' cannot bind to a value of unrelated type 'TrenchBroom::Model::WorldNode'
V[19:53:49.240] Ignored diagnostic. ../common/src/Model/Game.h:117:51:passing argument to parameter 'entity' here
I[19:53:49.251] --> $/progress
V[19:53:49.251] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"8/28","percentage":28.571428571428573}}}
I[19:53:49.251] --> $/progress
V[19:53:49.251] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"8/28","percentage":28.571428571428573}}}
V[19:53:49.252] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/AttributableNode.cpp (digest:=18C24A71B3B49097)
I[19:53:49.254] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.cpp (15652 symbols, 88377 refs, 475 files)
I[19:53:49.254] Failed to compile /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.cpp, index may be incomplete
I[19:53:49.318] --> $/progress
V[19:53:49.318] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"9/28","percentage":32.142857142857146}}}
I[19:53:49.318] --> $/progress
V[19:53:49.318] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"9/28","percentage":32.142857142857146}}}
V[19:53:49.319] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/View/FaceAttribsEditor.cpp (digest:=DDD3C085D2281F0C)
V[19:53:49.670] BackgroundIndex: serving version 1 (85157967 bytes)
E[19:53:49.673] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/ChangeBrushFaceAttributesCommand.h to validate stored index: No such file or directory
E[19:53:49.681] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/CopyTexCoordSystemFromFaceCommand.h to validate stored index: No such file or directory
E[19:53:49.683] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/RotateTexturesCommand.h to validate stored index: No such file or directory
E[19:53:49.686] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/ChangeEntityAttributesCommand.h to validate stored index: No such file or directory
E[19:53:49.687] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/ShearTexturesCommand.h to validate stored index: No such file or directory
E[19:53:49.701] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/ResizeBrushesCommand.h to validate stored index: No such file or directory
E[19:53:49.702] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/ConvertEntityColorCommand.h to validate stored index: No such file or directory
E[19:53:49.704] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/TransformObjectsCommand.h to validate stored index: No such file or directory
E[19:53:49.705] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MoveTexturesCommand.h to validate stored index: No such file or directory
E[19:53:49.712] Background-index: Couldn't read /Users/kristian/Documents/Code/TrenchBroom/common/src/View/UpdateEntitySpawnflagCommand.h to validate stored index: No such file or directory
I[19:53:49.719] --> $/progress
V[19:53:49.719] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/25","percentage":0}}}
I[19:53:49.719] --> $/progress
V[19:53:49.719] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/25","percentage":0}}}
I[19:53:49.719] --> $/progress
V[19:53:49.719] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/25","percentage":0}}}
I[19:53:49.719] --> $/progress
V[19:53:49.719] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/25","percentage":0}}}
I[19:53:49.719] --> $/progress
V[19:53:49.719] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/25","percentage":0}}}
I[19:53:49.719] --> $/progress
V[19:53:49.719] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"0/25","percentage":0}}}
I[19:53:49.719] --> $/progress
V[19:53:49.719] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"1/25","percentage":4}}}
I[19:53:49.719] --> $/progress
V[19:53:49.719] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"1/25","percentage":4}}}
I[19:53:49.719] --> $/progress
V[19:53:49.719] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"1/25","percentage":4}}}
I[19:53:49.719] --> $/progress
V[19:53:49.719] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"1/25","percentage":4}}}
I[19:53:49.719] --> $/progress
V[19:53:49.719] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"1/25","percentage":4}}}
I[19:53:49.719] --> $/progress
V[19:53:49.719] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"1/25","percentage":4}}}
V[19:53:49.719] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Object.cpp (digest:=4539BC560723084D)
V[19:53:49.720] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/View/GetVersion.cpp (digest:=D3D5E8340836AC8F)
V[19:53:49.720] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/BrushNode.cpp (digest:=294292753B168721)
V[19:53:49.720] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp (digest:=D42E9E635B364083)
V[19:53:49.721] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/View/FaceAttribsEditor.cpp (digest:=DDD3C085D2281F0C)
V[19:53:49.721] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Game.cpp (digest:=FB4B0A92B3AB7F69)
V[19:53:49.721] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.cpp (digest:=B602EF7B4016021F)
V[19:53:49.722] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/IO/NodeSerializer.cpp (digest:=A8AAE9B654C75BC3)
V[19:53:49.722] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapViewBase.cpp (digest:=AFDD0DF8795B2235)
V[19:53:49.722] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapDocument.cpp (digest:=7D0912E625854F38)
V[19:53:51.123] indexed preamble AST for /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp version 1:
symbol slab: 53207 symbols, 13818712 bytes
ref slab: 0 symbols, 0 refs, 136 bytes
relations slab: 873 relations, 17432 bytes
I[19:53:51.421] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/View/GetVersion.cpp (15249 symbols, 68133 refs, 375 files)
I[19:53:51.444] --> $/progress
V[19:53:51.444] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"2/25","percentage":8}}}
I[19:53:51.444] --> $/progress
V[19:53:51.444] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"2/25","percentage":8}}}
V[19:53:51.445] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/WorldNode.cpp (digest:=BCC01F4346E11E01)
I[19:53:51.496] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Object.cpp (15463 symbols, 68730 refs, 402 files)
I[19:53:51.523] --> $/progress
V[19:53:51.523] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"3/25","percentage":12}}}
I[19:53:51.523] --> $/progress
V[19:53:51.523] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"3/25","percentage":12}}}
V[19:53:51.523] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameConfig.cpp (digest:=962D90B0F8FC18A9)
V[19:53:51.589] Build dynamic index for header symbols with estimated memory usage of 28553002 bytes
I[19:53:51.589] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Game.cpp (15603 symbols, 69350 refs, 421 files)
V[19:53:51.607] Built preamble of size 29003900 for file /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp version 1
I[19:53:51.619] --> $/progress
V[19:53:51.619] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"4/25","percentage":16}}}
I[19:53:51.619] --> $/progress
V[19:53:51.619] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"4/25","percentage":16}}}
V[19:53:51.620] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/NodeTest.cpp (digest:=35CDB320A4A46658)
I[19:53:51.649] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/IO/NodeSerializer.cpp (15557 symbols, 69236 refs, 424 files)
V[19:53:51.663] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.h:53:92:non-virtual member function marked 'override' hides virtual member function
V[19:53:51.663] Ignored diagnostic. ../common/src/Model/Game.h:144:35:hidden overloaded virtual function 'TrenchBroom::Model::Game::doExtractSoftMapBounds' declared here: type mismatch at 1st parameter ('const TrenchBroom::Model::Entity &' vs 'const TrenchBroom::Model::AttributableNode &')
V[19:53:51.664] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.h:73:159:non-virtual member function marked 'override' hides virtual member function
V[19:53:51.664] Ignored diagnostic. ../common/src/Model/Game.h:159:26:hidden overloaded virtual function 'TrenchBroom::Model::Game::doLoadTextureCollections' declared here: type mismatch at 1st parameter ('const TrenchBroom::Model::Entity &' vs 'TrenchBroom::Model::AttributableNode &')
V[19:53:51.664] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.h:77:99:non-virtual member function marked 'override' hides virtual member function
V[19:53:51.664] Ignored diagnostic. ../common/src/Model/Game.h:163:43:hidden overloaded virtual function 'TrenchBroom::Model::Game::doExtractTextureCollections' declared here: type mismatch at 1st parameter ('const TrenchBroom::Model::Entity &' vs 'const TrenchBroom::Model::AttributableNode &')
V[19:53:51.664] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.h:78:111:non-virtual member function marked 'override' hides virtual member function
V[19:53:51.664] Ignored diagnostic. ../common/src/Model/Game.h:164:26:hidden overloaded virtual function 'TrenchBroom::Model::Game::doUpdateTextureCollections' declared here: type mismatch at 1st parameter ('TrenchBroom::Model::Entity &' vs 'TrenchBroom::Model::AttributableNode &')
V[19:53:51.664] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.h:83:112:non-virtual member function marked 'override' hides virtual member function
V[19:53:51.664] Ignored diagnostic. ../common/src/Model/Game.h:169:54:hidden overloaded virtual function 'TrenchBroom::Model::Game::doExtractEntityDefinitionFile' declared here: type mismatch at 1st parameter ('const TrenchBroom::Model::Entity &' vs 'const TrenchBroom::Model::AttributableNode &')
V[19:53:51.665] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.h:87:95:non-virtual member function marked 'override' hides virtual member function
V[19:53:51.665] Ignored diagnostic. ../common/src/Model/Game.h:173:46:hidden overloaded virtual function 'TrenchBroom::Model::Game::doExtractEnabledMods' declared here: type mismatch at 1st parameter ('const TrenchBroom::Model::Entity &' vs 'const TrenchBroom::Model::AttributableNode &')
V[19:53:51.680] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.cpp:144:75:no viable conversion from 'TrenchBroom::Model::AttributableNode' to 'const TrenchBroom::Model::Entity'
V[19:53:51.680] Ignored diagnostic. ../common/src/Model/Entity.h:88:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::AttributableNode' to 'const TrenchBroom::Model::Entity &' for 1st argument
V[19:53:51.680] Ignored diagnostic. ../common/src/Model/Entity.h:89:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::AttributableNode' to 'TrenchBroom::Model::Entity &&' for 1st argument
V[19:53:51.680] Ignored diagnostic. ../common/src/Model/Entity.h:85:22:explicit constructor is not a candidate
V[19:53:51.680] Ignored diagnostic. ../common/src/Model/Entity.h:86:22:explicit constructor is not a candidate
V[19:53:51.680] Ignored diagnostic. ../common/src/Model/Game.h:116:75:passing argument to parameter 'entity' here
I[19:53:51.681] --> $/progress
V[19:53:51.681] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"5/25","percentage":20}}}
I[19:53:51.681] --> $/progress
V[19:53:51.681] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"5/25","percentage":20}}}
V[19:53:51.682] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/IO/GameConfigParser.cpp (digest:=F02BC135E846223D)
V[19:53:51.781] indexed file AST for /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp version 1:
symbol slab: 50 symbols, 15824 bytes
ref slab: 305 symbols, 937 refs, 37000 bytes
relations slab: 0 relations, 24 bytes
V[19:53:51.782] Build dynamic index for main-file symbols with estimated memory usage of 101272 bytes
I[19:53:51.782] --> textDocument/publishDiagnostics
V[19:53:51.782] >>> {"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"diagnostics":[{"code":"member_decl_does_not_match","message":"Out-of-line definition of 'doExtractSoftMapBounds' does not match any declaration in 'TrenchBroom::Model::GameImpl'","range":{"end":{"character":60,"line":133},"start":{"character":38,"line":133}},"relatedInformation":[],"severity":1,"source":"clang"},{"code":"member_decl_does_not_match","message":"Out-of-line definition of 'doLoadTextureCollections' does not match any declaration in 'TrenchBroom::Model::GameImpl'","range":{"end":{"character":47,"line":251},"start":{"character":23,"line":251}},"relatedInformation":[],"severity":1,"source":"clang"},{"code":"typecheck_nonviable_condition","message":"No viable conversion from 'TrenchBroom::Model::AttributableNode' to 'const TrenchBroom::Model::Entity'","range":{"end":{"character":61,"line":252},"start":{"character":57,"line":252}},"relatedInformation":[{"location":{"range":{"end":{"character":18,"line":87},"start":{"character":12,"line":87}},"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Entity.h"},"message":"Candidate constructor not viable: no known conversion from 'TrenchBroom::Model::AttributableNode' to 'const TrenchBroom::Model::Entity &' for 1st argument"},{"location":{"range":{"end":{"character":18,"line":88},"start":{"character":12,"line":88}},"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Entity.h"},"message":"Candidate constructor not viable: no known conversion from 'TrenchBroom::Model::AttributableNode' to 'TrenchBroom::Model::Entity &&' for 1st argument"},{"location":{"range":{"end":{"character":27,"line":84},"start":{"character":21,"line":84}},"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Entity.h"},"message":"Explicit constructor is not a candidate"},{"location":{"range":{"end":{"character":27,"line":85},"start":{"character":21,"line":85}},"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Entity.h"},"message":"Explicit constructor is not a candidate"},{"location":{"range":{"end":{"character":80,"line":115},"start":{"character":74,"line":115}},"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Game.h"},"message":"Passing argument to parameter 'entity' here"}],"severity":1,"source":"clang"},{"code":"member_decl_does_not_match","message":"Out-of-line definition of 'doExtractTextureCollections' does not match any declaration in 'TrenchBroom::Model::GameImpl'","range":{"end":{"character":67,"line":302},"start":{"character":40,"line":302}},"relatedInformation":[],"severity":1,"source":"clang"},{"code":"member_decl_does_not_match","message":"Out-of-line definition of 'doUpdateTextureCollections' does not match any declaration in 'TrenchBroom::Model::GameImpl'","range":{"end":{"character":49,"line":316},"start":{"character":23,"line":316}},"relatedInformation":[],"severity":1,"source":"clang"},{"code":"member_decl_does_not_match","message":"Out-of-line definition of 'doExtractEntityDefinitionFile' does not match any declaration in 'TrenchBroom::Model::GameImpl'","range":{"end":{"character":80,"line":383},"start":{"character":51,"line":383}},"relatedInformation":[],"severity":1,"source":"clang"},{"code":"member_decl_does_not_match","message":"Out-of-line definition of 'doExtractEnabledMods' does not match any declaration in 'TrenchBroom::Model::GameImpl'","range":{"end":{"character":63,"line":556},"start":{"character":43,"line":556}},"relatedInformation":[],"severity":1,"source":"clang"}],"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp","version":1}}
V[19:53:51.782] ASTWorker running EnumerateTweaks on version 1 of /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp
I[19:53:51.782] --> reply:textDocument/codeAction(1) 3443 ms
V[19:53:51.782] >>> {"id":1,"jsonrpc":"2.0","result":[]}
V[19:53:51.782] ASTWorker running DocumentLinks on version 1 of /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp
I[19:53:51.782] --> reply:textDocument/documentLink(2) 3443 ms
V[19:53:51.784] >>> {"id":2,"jsonrpc":"2.0","result":[{"range":{"end":{"character":21,"line":19},"start":{"character":9,"line":19}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.h"},{"range":{"end":{"character":19,"line":21},"start":{"character":9,"line":21}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Ensure.h"},{"range":{"end":{"character":23,"line":22},"start":{"character":9,"line":22}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Exceptions.h"},{"range":{"end":{"character":19,"line":23},"start":{"character":9,"line":23}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Logger.h"},{"range":{"end":{"character":19,"line":24},"start":{"character":9,"line":24}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Macros.h"},{"range":{"end":{"character":27,"line":25},"start":{"character":9,"line":25}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Assets/Palette.h"},{"range":{"end":{"character":31,"line":26},"start":{"character":9,"line":26}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Assets/EntityModel.h"},{"range":{"end":{"character":44,"line":27},"start":{"character":9,"line":27}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Assets/EntityDefinitionFileSpec.h"},{"range":{"end":{"character":25,"line":28},"start":{"character":9,"line":28}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/AseParser.h"},{"range":{"end":{"character":31,"line":29},"start":{"character":9,"line":29}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/BrushFaceReader.h"},{"range":{"end":{"character":27,"line":30},"start":{"character":9,"line":30}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/Bsp29Parser.h"},{"range":{"end":{"character":25,"line":31},"start":{"character":9,"line":31}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/DefParser.h"},{"range":{"end":{"character":22,"line":32},"start":{"character":9,"line":32}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/DiskIO.h"},{"range":{"end":{"character":25,"line":33},"start":{"character":9,"line":33}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/DkmParser.h"},{"range":{"end":{"character":30,"line":34},"start":{"character":9,"line":34}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/DiskFileSystem.h"},{"range":{"end":{"character":25,"line":35},"start":{"character":9,"line":35}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/EntParser.h"},{"range":{"end":{"character":25,"line":36},"start":{"character":9,"line":36}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/FgdParser.h"},{"range":{"end":{"character":20,"line":37},"start":{"character":9,"line":37}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/File.h"},{"range":{"end":{"character":27,"line":38},"start":{"character":9,"line":38}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/FileMatcher.h"},{"range":{"end":{"character":32,"line":39},"start":{"character":9,"line":39}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/GameConfigParser.h"},{"range":{"end":{"character":23,"line":40},"start":{"character":9,"line":40}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/IOUtils.h"},{"range":{"end":{"character":25,"line":41},"start":{"character":9,"line":41}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/MdlParser.h"},{"range":{"end":{"character":25,"line":42},"start":{"character":9,"line":42}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/Md2Parser.h"},{"range":{"end":{"character":25,"line":43},"start":{"character":9,"line":43}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/Md3Parser.h"},{"range":{"end":{"character":25,"line":44},"start":{"character":9,"line":44}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/MdxParser.h"},{"range":{"end":{"character":26,"line":45},"start":{"character":9,"line":45}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/NodeReader.h"},{"range":{"end":{"character":26,"line":46},"start":{"character":9,"line":46}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/NodeWriter.h"},{"range":{"end":{"character":25,"line":47},"start":{"character":9,"line":47}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/ObjParser.h"},{"range":{"end":{"character":29,"line":48},"start":{"character":9,"line":48}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/ObjSerializer.h"},{"range":{"end":{"character":27,"line":49},"start":{"character":9,"line":49}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/WorldReader.h"},{"range":{"end":{"character":34,"line":50},"start":{"character":9,"line":50}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/SimpleParserStatus.h"},{"range":{"end":{"character":27,"line":51},"start":{"character":9,"line":51}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/SystemPaths.h"},{"range":{"end":{"character":29,"line":52},"start":{"character":9,"line":52}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/IO/TextureLoader.h"},{"range":{"end":{"character":31,"line":53},"start":{"character":9,"line":53}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/BrushBuilder.h"},{"range":{"end":{"character":29,"line":54},"start":{"character":9,"line":54}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/BrushError.h"},{"range":{"end":{"character":28,"line":55},"start":{"character":9,"line":55}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/BrushNode.h"},{"range":{"end":{"character":25,"line":56},"start":{"character":9,"line":56}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Entity.h"},{"range":{"end":{"character":35,"line":57},"start":{"character":9,"line":57}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/EntityAttributes.h"},{"range":{"end":{"character":31,"line":58},"start":{"character":9,"line":58}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/ExportFormat.h"},{"range":{"end":{"character":29,"line":59},"start":{"character":9,"line":59}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameConfig.h"},{"range":{"end":{"character":28,"line":60},"start":{"character":9,"line":60}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/LayerNode.h"},{"range":{"end":{"character":28,"line":61},"start":{"character":9,"line":61}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/WorldNode.h"},{"range":{"end":{"character":25,"line":63},"start":{"character":9,"line":63}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/lib/kdl/include/kdl/overload.h"},{"range":{"end":{"character":23,"line":64},"start":{"character":9,"line":64}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/lib/kdl/include/kdl/result.h"},{"range":{"end":{"character":31,"line":65},"start":{"character":9,"line":65}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/lib/kdl/include/kdl/string_compare.h"},{"range":{"end":{"character":30,"line":66},"start":{"character":9,"line":66}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/lib/kdl/include/kdl/string_format.h"},{"range":{"end":{"character":29,"line":67},"start":{"character":9,"line":67}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/lib/kdl/include/kdl/string_utils.h"},{"range":{"end":{"character":29,"line":68},"start":{"character":9,"line":68}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/lib/kdl/include/kdl/vector_utils.h"},{"range":{"end":{"character":27,"line":70},"start":{"character":9,"line":70}},"target":"file:///Users/kristian/Documents/Code/TrenchBroom/lib/vecmath/include/vecmath/vec_io.h"},{"range":{"end":{"character":18,"line":72},"start":{"character":9,"line":72}},"target":"file:///Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c%2B%2B/v1/fstream"},{"range":{"end":{"character":17,"line":73},"start":{"character":9,"line":73}},"target":"file:///Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c%2B%2B/v1/string"},{"range":{"end":{"character":17,"line":74},"start":{"character":9,"line":74}},"target":"file:///Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c%2B%2B/v1/vector"}]}
V[19:53:51.784] ASTWorker running SemanticHighlights on version 1 of /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp
I[19:53:51.785] --> reply:textDocument/semanticTokens/full(3) 3145 ms
V[19:53:51.786] >>> {"id":3,"jsonrpc":"2.0","result":{"data":[76,10,11,14,0,1,14,5,14,0,1,8,8,8,0,0,10,8,8,0,0,9,10,8,0,0,12,6,2,0,0,14,2,14,0,0,4,4,8,0,0,6,8,2,0,0,10,6,8,0,0,8,6,2,0,1,8,8,6,0,0,9,6,2,0,1,8,10,6,0,0,11,8,2,0,1,12,20,4,0,0,21,6,2,0,3,13,8,8,0,0,10,20,4,0,0,21,6,8,0,0,8,6,2,0,1,12,4,6,0,0,5,10,4,0,0,11,8,6,0,0,10,10,6,0,0,12,23,6,0,0,25,6,2,0,3,14,3,14,0,0,5,6,8,0,0,8,8,8,0,0,10,10,4,0,1,19,8,6,0,0,9,4,4,0,3,8,2,14,0,0,4,4,8,0,0,5,8,8,0,0,10,10,4,0,1,19,10,6,0,3,13,8,8,0,0,10,13,4,0,0,20,2,14,0,0,4,4,8,0,0,6,8,2,0,0,10,6,8,0,0,8,6,2,0,1,16,8,2,0,0,12,10,6,0,1,16,10,6,0,0,13,8,2,0,1,16,20,4,0,0,21,6,2,0,4,13,8,8,0,0,10,26,4,0,0,33,3,14,0,0,5,6,8,0,0,7,2,14,0,0,4,4,8,0,0,7,11,2,0,0,13,6,8,0,0,8,6,2,0,1,16,11,2,0,0,15,23,6,0,1,16,23,6,0,0,26,11,2,0,1,16,20,4,0,0,21,6,2,0,4,8,4,8,0,0,6,10,8,0,0,11,8,8,0,0,10,28,4,0,0,35,3,14,0,0,5,6,8,0,0,7,2,14,0,0,4,4,8,0,0,7,11,2,0,1,12,10,8,0,0,11,6,1,0,1,23,4,8,0,0,6,10,1,0,0,13,11,2,0,1,22,4,8,0,0,5,7,1,0,0,10,10,6,0,0,13,10,1,0,1,21,7,1,0,0,8,10,4,0,0,17,2,14,0,0,4,4,14,0,0,6,15,3,0,0,16,7,1,0,1,20,6,1,0,0,7,6,4,0,0,7,3,14,0,0,5,9,3,0,0,10,10,1,0,0,39,10,1,0,0,11,8,4,0,3,19,6,1,0,3,14,17,8,0,0,19,8,8,0,0,10,19,4,0,1,19,8,6,0,0,9,17,4,0,3,8,6,17,0,0,7,8,8,0,0,10,19,4,0,1,19,8,6,0,0,9,17,4,0,3,8,3,14,0,0,5,8,8,0,0,9,2,14,0,0,4,5,8,0,0,7,8,8,0,0,10,15,4,0,1,19,8,6,0,0,9,13,4,0,3,8,4,8,0,0,6,13,8,0,0,14,8,8,0,0,10,22,4,0,0,29,16,8,0,0,18,4,2,0,1,17,4,2,0,0,5,6,4,0,0,9,12,4,0,0,13,14,14,0,0,16,13,0,0,2,24,17,9,0,0,19,4,10,0,0,6,15,4,0,3,22,4,8,0,0,6,8,1,0,0,11,4,2,0,0,5,6,4,0,0,9,9,4,0,0,10,14,14,0,0,16,13,0,0,0,16,8,1,0,0,13,8,1,0,0,12,15,14,0,0,17,15,0,0,1,24,17,9,0,0,19,3,10,0,0,5,2,14,0,0,4,24,3,0,0,26,8,1,0,2,24,17,9,0,0,19,3,10,0,0,5,3,14,0,0,5,7,0,0,4,14,3,14,0,0,5,6,8,0,0,7,8,8,0,0,11,8,8,0,0,10,11,4,0,1,19,8,6,0,0,9,9,4,0,3,8,3,14,0,0,5,10,8,0,0,11,9,8,0,0,11,8,8,0,0,10,8,4,0,0,15,9,9,0,0,10,6,2,0,0,14,2,14,0,0,4,5,8,0,0,7,11,2,0,0,13,6,8,0,0,8,6,2,0,1,18,4,8,0,0,5,18,1,0,0,21,8,6,0,0,9,14,4,0,0,15,10,3,0,0,11,6,2,0,1,17,18,1,0,0,19,7,4,0,0,13,2,14,0,0,4,4,14,0,0,6,10,3,0,0,11,18,1,0,1,23,9,4,0,0,10,6,2,0,0,8,11,2,0,0,13,18,1,0,0,20,6,2,0,2,16,4,8,0,0,5,11,1,0,0,14,5,14,0,0,7,6,8,0,1,20,6,2,0,0,10,9,9,0,0,11,5,10,0,0,9,6,2,0,0,10,9,9,0,0,11,12,10,0,0,16,6,2,0,0,10,9,9,0,0,11,12,10,0,1,20,11,1,0,0,12,20,4,0,0,21,14,14,0,0,16,12,0,0,3,16,4,8,0,0,5,9,1,0,0,12,3,14,0,0,5,11,3,0,0,12,9,8,0,0,11,3,14,0,0,5,4,3,0,0,5,11,1,0,0,14,6,2,0,2,22,5,14,0,0,7,12,8,0,0,13,7,1,0,0,8,9,1,0,0,10,3,4,0,0,7,11,2,0,0,13,18,4,0,1,16,7,1,0,0,8,12,4,0,0,13,2,14,0,0,4,4,8,0,0,26,5,14,0,0,7,19,8,0,0,21,13,7,0,1,20,5,4,0,0,6,3,14,0,0,5,8,3,0,1,28,5,8,0,0,8,1,2,0,1,28,9,1,0,0,11,12,4,0,0,16,8,4,0,0,9,9,1,0,0,11,11,4,0,0,12,3,14,0,0,5,4,3,0,0,5,1,2,0,2,34,5,14,0,0,7,10,9,0,0,11,1,2,0,1,28,6,2,0,0,7,5,4,0,0,49,1,2,0,4,23,9,1,0,4,8,3,14,0,0,5,10,8,0,0,11,9,8,0,0,11,8,8,0,0,10,9,4,0,0,16,9,9,0,0,10,6,2,0,0,14,2,14,0,0,4,5,8,0,0,7,11,2,0,0,19,2,14,0,0,4,4,8,0,0,6,4,2,0,0,6,6,8,0,0,8,6,2,0,1,12,2,14,0,0,4,18,8,0,0,19,12,1,0,0,13,6,2,0,1,12,4,8,0,0,5,4,1,0,0,7,2,14,0,0,4,4,14,0,0,6,8,3,0,0,9,2,14,0,0,4,4,14,0,0,6,7,3,0,0,8,4,2,0,1,12,4,8,0,0,5,10,1,0,0,13,4,1,0,0,6,6,4,0,0,9,6,4,0,1,12,2,14,0,0,4,11,8,0,0,12,11,1,0,0,12,10,1,0,0,11,10,4,0,1,19,11,1,0,0,12,4,4,0,0,5,6,2,0,0,8,11,2,0,0,13,12,1,0,3,13,8,8,0,0,10,10,4,0,0,11,9,8,0,0,11,5,2,0,0,13,2,14,0,0,4,4,8,0,0,6,4,2,0,0,17,9,2,0,1,18,4,8,0,0,5,13,1,0,0,16,10,3,0,0,11,5,2,0,0,6,6,4,0,2,12,3,14,0,0,5,8,8,0,0,9,4,1,0,0,7,22,3,0,0,23,4,2,0,1,17,4,1,0,1,22,19,8,0,0,43,4,2,0,0,5,8,4,0,2,12,2,14,0,0,4,16,3,0,0,17,4,1,0,0,6,8,4,0,0,12,13,1,0,2,12,2,14,0,0,4,10,8,0,0,11,6,1,0,0,7,5,2,0,0,7,4,1,0,1,12,6,1,0,0,7,12,4,0,0,13,9,2,0,1,12,6,1,0,0,7,8,4,0,3,13,8,8,0,0,10,10,4,0,0,11,9,8,0,0,11,5,2,0,0,13,2,14,0,0,4,4,8,0,0,6,4,2,0,1,12,10,4,0,0,11,5,2,0,0,7,4,2,0,3,13,8,8,0,0,10,11,4,0,0,12,9,8,0,0,11,5,2,0,0,13,5,14,0,0,7,12,9,0,0,13,6,2,0,0,14,2,14,0,0,4,4,8,0,0,6,4,2,0,1,20,6,2,0,1,21,5,14,0,0,7,12,9,0,0,14,12,10,0,1,20,2,14,0,0,4,10,8,0,0,11,6,1,0,0,7,5,2,0,0,7,3,14,0,0,5,11,3,0,0,12,2,14,0,0,4,17,8,0,0,19,4,2,0,1,20,6,1,0,0,7,12,4,0,1,20,6,1,0,0,7,8,4,0,3,21,5,14,0,0,7,12,9,0,0,14,3,10,0,1,20,10,4,0,0,11,5,2,0,0,7,4,2,0,5,8,3,14,0,0,5,6,8,0,0,7,4,8,0,0,7,8,8,0,0,10,12,4,0,0,19,3,14,0,0,5,6,8,0,0,8,3,2,0,0,5,9,8,0,0,11,5,2,0,0,13,2,14,0,0,4,5,8,0,0,7,11,2,0,0,13,6,8,0,0,8,6,2,0,1,12,2,14,0,0,4,18,8,0,0,19,12,1,0,0,13,6,2,0,1,19,2,14,0,0,4,10,8,0,0,12,4,5,0,0,5,3,2,0,0,5,5,2,0,0,7,11,2,0,0,13,12,1,0,3,8,3,14,0,0,5,6,8,0,0,7,9,8,0,0,11,8,8,0,0,10,17,4,0,0,24,3,14,0,0,5,6,8,0,0,8,3,2,0,0,5,9,8,0,0,11,5,2,0,0,13,2,14,0,0,4,5,8,0,0,7,11,2,0,0,13,6,8,0,0,8,6,2,0,1,12,2,14,0,0,4,18,8,0,0,19,12,1,0,0,13,6,2,0,1,12,2,14,0,0,4,15,8,0,0,16,6,1,0,0,7,3,2,0,0,5,5,2,0,1,19,6,1,0,0,7,4,4,0,0,5,11,2,0,0,13,12,1,0,3,13,8,8,0,0,10,20,4,0,0,21,9,8,0,0,11,5,2,0,0,13,3,14,0,0,5,6,8,0,0,7,4,8,0,0,8,5,2,0,0,7,3,14,0,0,5,7,8,0,0,9,6,2,0,1,12,2,14,0,0,4,10,8,0,0,11,6,1,0,0,7,5,2,0,0,7,6,2,0,1,12,6,1,0,0,7,10,4,0,0,11,5,2,0,3,13,8,8,0,0,10,25,4,0,0,26,9,8,0,0,11,5,2,0,0,13,3,14,0,0,5,6,8,0,0,7,9,8,0,0,12,5,2,0,0,7,3,14,0,0,5,7,8,0,0,9,6,2,0,1,12,2,14,0,0,4,10,8,0,0,11,6,1,0,0,7,5,2,0,0,7,6,2,0,1,12,6,1,0,0,7,15,4,0,0,16,5,2,0,3,8,4,8,0,0,6,18,9,0,0,19,8,8,0,0,10,20,4,0,1,18,5,14,0,0,7,10,8,0,1,20,8,6,0,0,9,13,4,0,0,16,7,6,0,0,8,4,6,0,1,21,20,8,0,0,22,7,10,0,1,27,18,9,0,0,20,4,10,0,1,21,20,8,0,0,22,12,10,0,1,27,18,9,0,0,20,9,10,0,1,21,20,8,0,0,22,8,10,0,1,26,13,8,0,1,16,13,18,0,4,13,8,8,0,0,10,24,4,0,0,25,16,8,0,0,18,4,2,0,0,12,2,14,0,0,4,4,8,0,0,6,12,2,0,0,14,6,14,0,0,8,14,8,0,0,16,14,2,0,0,16,6,8,0,0,8,6,2,0,1,23,5,1,0,0,8,25,4,0,0,26,4,2,0,2,18,4,8,0,0,5,15,1,0,0,18,28,4,0,0,29,12,2,0,1,12,2,14,0,0,4,13,8,0,0,14,13,1,0,0,14,4,6,0,0,6,15,1,0,0,17,8,6,0,0,9,13,4,0,0,17,6,2,0,4,8,3,14,0,0,5,6,8,0,0,7,2,14,0,0,4,4,8,0,0,6,8,8,0,0,10,28,4,0,0,35,2,14,0,0,4,4,8,0,0,6,12,2,0,1,12,3,14,0,0,5,6,8,0,0,7,2,14,0,0,4,4,8,0,0,6,6,1,0,3,12,6,1,0,0,7,9,4,0,0,10,12,2,0,3,12,6,1,0,0,7,9,4,0,0,10,10,6,0,3,12,6,1,0,0,7,9,4,0,0,10,2,14,0,0,4,11,14,0,0,13,12,3,0,2,19,6,1,0,3,13,8,8,0,0,10,21,4,0,0,28,2,14,0,0,4,4,8,0,0,6,4,2,0,1,18,4,8,0,0,6,13,1,0,0,16,8,6,0,0,9,13,4,0,0,16,7,6,0,1,20,13,1,0,0,14,4,6,0,1,21,20,8,0,0,22,7,10,0,1,27,4,2,0,0,5,12,4,0,0,13,13,1,0,0,14,10,6,0,0,11,10,6,0,1,21,20,8,0,0,22,12,10,0,1,21,20,8,0,0,22,8,10,0,2,16,13,18,0,4,8,3,14,0,0,5,6,8,0,0,7,2,14,0,0,4,4,8,0,0,6,8,8,0,0,10,24,4,0,2,22,4,8,0,0,6,10,1,0,0,13,8,6,0,0,9,13,4,0,0,16,7,6,0,0,8,13,6,0,1,21,10,1,0,0,11,7,4,0,0,13,4,6,0,0,5,15,4,0,0,16,10,1,0,1,27,3,14,0,0,5,10,3,0,0,11,3,14,0,0,5,6,8,0,0,7,2,14,0,0,4,4,8,0,0,7,10,1,0,0,14,4,6,0,0,5,20,4,0,0,21,10,1,0,0,12,2,14,0,0,4,15,8,0,2,23,3,14,0,0,5,6,8,0,0,7,2,14,0,0,4,4,8,0,1,21,19,8,0,0,21,1,1,0,1,22,13,8,0,0,55,3,14,0,0,5,6,8,0,0,7,1,1,0,0,2,4,4,0,4,8,3,14,0,0,5,6,8,0,0,7,3,14,0,0,5,6,8,0,0,8,8,8,0,0,10,33,4,0,1,19,8,6,0,0,9,13,4,0,0,16,7,6,0,0,8,10,6,0,0,11,10,6,0,3,8,3,14,0,0,5,6,8,0,0,7,2,14,0,0,4,4,8,0,0,6,8,8,0,0,10,27,4,0,0,34,16,8,0,0,18,4,2,0,1,18,4,8,0,0,6,8,1,0,0,11,8,6,0,0,9,13,4,0,0,16,9,6,0,1,16,8,1,0,0,9,5,4,0,4,18,4,8,0,0,6,10,1,0,0,13,4,2,0,0,5,6,4,0,0,9,9,4,0,0,10,8,1,0,1,17,10,1,0,4,19,2,14,0,0,4,4,8,0,0,6,7,5,0,0,8,3,14,0,0,5,9,3,0,0,11,10,1,0,3,13,8,8,0,0,10,26,4,0,0,27,16,8,0,0,18,4,2,0,0,12,3,14,0,0,5,6,8,0,0,7,2,14,0,0,4,4,8,0,0,7,5,2,0,1,18,4,8,0,0,6,9,1,0,0,12,8,6,0,0,9,13,4,0,0,16,9,6,0,1,16,9,1,0,0,10,5,4,0,4,18,4,8,0,0,5,5,1,0,0,8,3,14,0,0,5,8,3,0,0,9,2,14,0,0,4,4,8,0,0,6,9,5,0,0,10,5,2,0,1,12,4,8,0,0,5,6,1,0,0,9,4,2,0,0,5,6,4,0,1,12,6,1,0,0,7,20,4,0,0,21,9,1,0,0,11,5,1,0,1,12,4,2,0,0,5,9,4,0,0,10,3,14,0,0,5,4,3,0,0,5,6,1,0,3,13,8,8,0,0,10,15,4,0,1,12,4,6,0,0,5,13,4,0,3,13,8,8,0,0,10,24,4,0,0,31,2,14,0,0,4,4,8,0,0,6,4,2,0,1,18,4,8,0,0,5,9,1,0,0,12,4,2,0,0,5,9,4,0,1,16,3,14,0,0,5,2,14,0,0,4,12,3,0,0,20,9,1,0,2,23,3,14,0,0,5,2,14,0,0,4,12,3,0,0,20,9,1,0,2,23,3,14,0,0,5,2,14,0,0,4,12,3,0,0,20,9,1,0,7,8,3,14,0,0,5,6,8,0,0,7,6,14,0,0,8,16,8,0,0,19,8,8,0,0,10,23,4,0,0,24,2,14,0,0,4,12,8,0,0,14,6,2,0,0,14,2,14,0,0,4,4,8,0,0,6,4,2,0,1,18,4,8,0,0,5,9,1,0,0,12,4,2,0,0,5,9,4,0,1,18,4,8,0,0,6,12,1,0,0,15,8,6,0,0,9,12,4,0,0,15,12,6,0,2,16,3,14,0,0,5,2,14,0,0,4,12,3,0,0,20,9,1,0,1,16,4,8,0,0,5,4,1,0,0,7,2,14,0,0,4,4,14,0,0,6,8,3,0,0,9,2,14,0,0,4,4,14,0,0,6,7,3,0,0,8,4,2,0,1,16,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,1,16,2,14,0,0,4,9,8,0,0,10,6,1,0,0,7,6,1,0,0,7,10,4,0,0,14,12,1,0,0,14,4,1,0,0,6,4,4,0,1,23,6,1,0,0,7,16,4,0,0,17,6,2,0,1,23,3,14,0,0,5,2,14,0,0,4,12,3,0,0,20,9,1,0,1,16,4,8,0,0,5,4,1,0,0,7,2,14,0,0,4,4,14,0,0,6,8,3,0,0,9,2,14,0,0,4,4,14,0,0,6,7,3,0,0,8,4,2,0,1,16,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,1,16,2,14,0,0,4,9,8,0,0,10,6,1,0,0,7,6,1,0,0,7,10,4,0,0,14,12,1,0,1,23,6,1,0,0,7,16,4,0,0,17,6,2,0,1,23,3,14,0,0,5,2,14,0,0,4,12,3,0,0,20,9,1,0,1,16,4,8,0,0,5,4,1,0,0,7,2,14,0,0,4,4,14,0,0,6,8,3,0,0,9,2,14,0,0,4,4,14,0,0,6,7,3,0,0,8,4,2,0,1,16,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,1,16,2,14,0,0,4,9,8,0,0,10,6,1,0,0,7,6,1,0,0,7,10,4,0,0,14,12,1,0,1,23,6,1,0,0,7,16,4,0,0,17,6,2,0,2,22,13,8,0,0,54,4,2,0,0,5,8,4,0,4,8,3,14,0,0,5,6,8,0,0,7,6,14,0,0,8,24,8,0,0,26,8,8,0,0,10,26,4,0,1,18,4,8,0,0,5,5,1,0,0,8,8,6,0,0,9,12,4,0,0,15,12,6,0,1,18,4,17,0,0,5,5,1,0,0,8,5,1,0,0,6,4,4,0,2,12,3,14,0,0,5,6,8,0,0,7,6,14,0,0,8,24,8,0,0,26,6,1,0,1,12,6,1,0,0,7,7,4,0,0,8,5,1,0,2,23,4,8,0,0,6,4,1,0,0,7,5,1,0,1,16,6,1,0,0,7,9,4,0,0,10,6,14,0,0,8,24,8,0,0,26,7,5,0,0,8,4,1,0,3,19,6,1,0,3,8,6,14,0,0,8,24,8,0,0,25,8,8,0,0,10,29,4,0,0,36,16,8,0,0,18,4,2,0,1,22,4,8,0,0,6,8,1,0,0,11,4,2,0,0,5,6,4,0,0,9,9,4,0,0,10,14,14,0,0,16,17,0,0,1,23,6,14,0,0,8,24,8,0,0,26,5,5,0,0,7,8,1,0,2,23,27,4,0,4,8,6,14,0,0,8,24,8,0,0,25,8,8,0,0,10,27,4,0,1,18,4,8,0,0,5,5,1,0,0,8,8,6,0,0,9,12,4,0,0,15,12,6,0,1,16,5,1,0,0,6,5,4,0,1,22,13,8,0,0,62,8,4,0,3,18,4,8,0,0,6,4,1,0,0,7,5,1,0,0,6,5,4,0,1,19,6,14,0,0,8,24,8,0,0,26,7,5,0,0,8,4,1,0,3,8,2,14,0,0,4,4,8,0,0,5,8,8,0,0,10,26,4,0,0,33,6,14,0,0,8,24,8,0,0,26,4,2,0,0,12,3,14,0,0,5,6,8,0,0,7,2,14,0,0,4,4,8,0,0,7,11,2,0,1,17,4,2,0,0,5,5,4,0,1,22,13,8,0,3,18,4,8,0,0,6,4,1,0,0,7,4,2,0,0,5,4,4,0,1,16,4,2,0,0,5,7,4,0,1,23,8,6,0,0,9,14,4,0,0,15,4,1,0,2,20,4,1,0,0,5,10,4,0,1,27,4,1,0,2,27,2,14,0,0,4,4,14,0,0,6,11,3,0,0,12,11,2,0,0,13,4,1,0,5,8,3,14,0,0,5,10,8,0,0,11,6,14,0,0,8,11,8,0,0,13,8,8,0,0,10,17,4,0,0,24,2,14,0,0,4,4,8,0,0,6,4,2,0,0,6,6,8,0,0,8,6,2,0,2,16,4,8,0,0,5,4,1,0,0,7,4,6,0,0,5,8,4,0,0,9,4,2,0,1,16,6,18,0,0,7,4,1,0,2,22,4,8,0,0,5,9,1,0,0,12,4,2,0,0,5,13,4,0,0,16,8,4,0,1,22,4,8,0,0,5,9,1,0,0,12,3,14,0,0,5,12,3,0,0,13,4,2,0,0,5,9,4,0,1,22,4,8,0,0,5,9,1,0,0,12,8,6,0,0,9,12,4,0,0,15,12,6,0,2,20,9,1,0,0,22,3,14,0,0,5,12,3,0,0,13,9,1,0,1,26,4,8,0,0,5,7,1,0,0,10,18,4,0,1,20,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,1,20,2,14,0,0,4,9,8,0,0,10,6,1,0,0,7,9,1,0,0,11,3,14,0,0,5,5,3,0,0,6,6,1,0,0,9,3,14,0,0,5,3,3,0,0,4,6,1,0,0,9,7,1,0,1,27,6,1,0,0,7,15,4,0,0,16,6,2,0,1,27,9,1,0,0,22,3,14,0,0,5,12,3,0,0,13,9,1,0,1,26,4,8,0,0,5,7,1,0,0,10,18,4,0,1,20,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,1,20,2,14,0,0,4,9,8,0,0,10,6,1,0,0,7,9,1,0,0,11,3,14,0,0,5,5,3,0,0,6,6,1,0,0,9,3,14,0,0,5,3,3,0,0,4,6,1,0,0,9,7,1,0,0,9,4,6,0,1,27,6,1,0,0,7,15,4,0,0,16,6,2,0,1,27,9,1,0,0,22,3,14,0,0,5,12,3,0,0,13,9,1,0,1,20,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,1,20,2,14,0,0,4,9,8,0,0,10,6,1,0,0,7,9,1,0,0,11,3,14,0,0,5,5,3,0,0,6,6,1,0,0,9,3,14,0,0,5,3,3,0,0,4,6,1,0,0,9,4,6,0,1,27,6,1,0,0,7,15,4,0,0,16,6,2,0,1,27,9,1,0,0,22,3,14,0,0,5,12,3,0,0,13,9,1,0,1,20,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,1,20,2,14,0,0,4,9,8,0,0,10,6,1,0,0,7,9,1,0,0,11,3,14,0,0,5,5,3,0,0,6,6,1,0,0,9,3,14,0,0,5,3,3,0,0,4,6,1,0,0,9,4,6,0,1,27,6,1,0,0,7,15,4,0,0,16,6,2,0,1,27,9,1,0,0,22,3,14,0,0,5,12,3,0,0,13,9,1,0,1,26,4,8,0,0,5,7,1,0,0,10,18,4,0,1,20,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,1,20,2,14,0,0,4,11,8,0,0,12,6,1,0,0,7,9,1,0,0,11,3,14,0,0,5,5,3,0,0,6,6,1,0,0,9,3,14,0,0,5,3,3,0,0,4,6,1,0,0,9,7,1,0,0,9,4,6,0,1,27,6,1,0,0,7,15,4,0,0,16,6,2,0,1,27,9,1,0,0,22,3,14,0,0,5,12,3,0,0,13,9,1,0,1,20,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,1,20,2,14,0,0,4,9,8,0,0,10,6,1,0,0,7,9,1,0,0,11,3,14,0,0,5,5,3,0,0,6,6,1,0,0,9,3,14,0,0,5,3,3,0,0,4,6,1,0,0,9,4,6,0,1,27,6,1,0,0,7,15,4,0,0,16,6,2,0,1,27,9,1,0,0,22,3,14,0,0,5,12,3,0,0,13,9,1,0,1,20,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,1,20,2,14,0,0,4,9,8,0,0,10,6,1,0,0,7,9,1,0,0,11,6,1,0,0,7,10,4,0,0,14,4,6,0,1,27,6,1,0,0,7,15,4,0,0,16,6,2,0,1,27,9,1,0,0,22,3,14,0,0,5,12,3,0,0,13,9,1,0,1,20,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,2,20,2,14,0,0,4,11,8,0,0,12,6,1,0,0,7,4,2,0,0,6,3,14,0,0,5,5,3,0,0,6,6,1,0,0,9,3,14,0,0,5,3,3,0,0,4,6,1,0,0,9,4,6,0,1,27,6,1,0,0,7,15,4,0,0,16,6,2,0,2,26,13,8,0,0,45,4,2,0,0,5,8,4,0,2,27,19,8,0,0,21,1,1,0,1,22,13,8,0,0,40,4,2,0,0,5,8,4,0,0,20,3,14,0,0,5,6,8,0,0,7,1,1,0,0,2,4,4,0,1,27,14,8,0,0,16,1,1,0,1,22,13,8,0,0,40,4,2,0,0,5,8,4,0,0,20,3,14,0,0,5,6,8,0,0,7,1,1,0,0,2,4,4,0,1,27,15,8,0,0,17,1,1,0,1,22,13,8,0,0,40,4,2,0,0,5,8,4,0,0,20,3,14,0,0,5,6,8,0,0,7,1,1,0,0,2,4,4,0,4,13,8,8,0,0,10,11,4,0,0,18,2,14,0,0,4,4,8,0,0,6,4,2,0,0,6,6,17,0,0,7,10,2,0,0,12,6,14,0,0,8,11,8,0,0,13,5,2,0,0,7,6,8,0,0,8,6,2,0,2,16,6,18,0,0,7,5,2,0,0,6,5,4,0,0,6,10,2,0,1,16,6,18,0,0,8,5,2,0,0,6,5,4,0,0,6,10,2,0,0,13,6,4,0,2,22,4,8,0,0,5,4,1,0,0,7,4,6,0,0,5,8,4,0,0,9,4,2,0,1,16,6,18,0,0,7,4,1,0,2,22,4,8,0,0,5,9,1,0,0,12,4,2,0,0,5,13,4,0,0,16,8,4,0,1,22,4,8,0,0,5,9,1,0,0,12,3,14,0,0,5,12,3,0,0,13,4,2,0,0,5,9,4,0,1,22,4,8,0,0,5,9,1,0,0,12,8,6,0,0,9,12,4,0,0,15,12,6,0,2,20,9,1,0,0,22,3,14,0,0,5,12,3,0,0,13,9,1,0,1,26,4,8,0,0,5,7,1,0,0,10,18,4,0,1,20,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,1,20,2,14,0,0,4,9,8,0,0,10,6,1,0,0,7,9,1,0,0,11,3,14,0,0,5,5,3,0,0,6,6,1,0,0,9,3,14,0,0,5,3,3,0,0,4,6,1,0,0,9,7,1,0,1,20,6,1,0,0,7,9,4,0,0,10,10,2,0,0,12,5,2,0,0,7,6,2,0,1,27,9,1,0,0,22,3,14,0,0,5,12,3,0,0,13,9,1,0,1,26,4,8,0,0,5,7,1,0,0,10,18,4,0,1,20,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,1,20,2,14,0,0,4,9,8,0,0,10,6,1,0,0,7,9,1,0,0,11,3,14,0,0,5,5,3,0,0,6,6,1,0,0,9,3,14,0,0,5,3,3,0,0,4,6,1,0,0,9,7,1,0,0,9,4,6,0,1,20,6,1,0,0,7,9,4,0,0,10,10,2,0,0,12,5,2,0,0,7,6,2,0,1,27,9,1,0,0,22,3,14,0,0,5,12,3,0,0,13,9,1,0,1,20,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,1,20,2,14,0,0,4,9,8,0,0,10,6,1,0,0,7,9,1,0,0,11,3,14,0,0,5,5,3,0,0,6,6,1,0,0,9,3,14,0,0,5,3,3,0,0,4,6,1,0,0,9,4,6,0,1,20,6,1,0,0,7,9,4,0,0,10,10,2,0,0,12,5,2,0,0,7,6,2,0,1,27,9,1,0,0,22,3,14,0,0,5,12,3,0,0,13,9,1,0,1,20,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,1,20,2,14,0,0,4,9,8,0,0,10,6,1,0,0,7,9,1,0,0,11,3,14,0,0,5,5,3,0,0,6,6,1,0,0,9,3,14,0,0,5,3,3,0,0,4,6,1,0,0,9,4,6,0,1,20,6,1,0,0,7,9,4,0,0,10,10,2,0,0,12,5,2,0,0,7,6,2,0,1,27,9,1,0,0,22,3,14,0,0,5,12,3,0,0,13,9,1,0,1,26,4,8,0,0,5,7,1,0,0,10,18,4,0,1,20,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,1,20,2,14,0,0,4,11,8,0,0,12,6,1,0,0,7,9,1,0,0,11,3,14,0,0,5,5,3,0,0,6,6,1,0,0,9,3,14,0,0,5,3,3,0,0,4,6,1,0,0,9,7,1,0,0,9,4,6,0,1,20,6,1,0,0,7,9,4,0,0,10,10,2,0,0,12,5,2,0,0,7,6,2,0,1,27,9,1,0,0,22,3,14,0,0,5,12,3,0,0,13,9,1,0,1,20,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,1,20,2,14,0,0,4,9,8,0,0,10,6,1,0,0,7,9,1,0,0,11,3,14,0,0,5,5,3,0,0,6,6,1,0,0,9,3,14,0,0,5,3,3,0,0,4,6,1,0,0,9,4,6,0,1,20,6,1,0,0,7,9,4,0,0,10,10,2,0,0,12,5,2,0,0,7,6,2,0,1,27,9,1,0,0,22,3,14,0,0,5,12,3,0,0,13,9,1,0,1,20,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,1,20,2,14,0,0,4,9,8,0,0,10,6,1,0,0,7,9,1,0,0,11,6,1,0,0,7,10,4,0,0,14,4,6,0,1,20,6,1,0,0,7,9,4,0,0,10,10,2,0,0,12,5,2,0,0,7,6,2,0,1,27,9,1,0,0,22,3,14,0,0,5,12,3,0,0,13,9,1,0,1,20,4,8,0,0,5,6,1,0,0,9,4,1,0,0,6,6,4,0,0,9,6,4,0,2,20,2,14,0,0,4,11,8,0,0,12,6,1,0,0,7,4,2,0,0,6,3,14,0,0,5,5,3,0,0,6,6,1,0,0,9,3,14,0,0,5,3,3,0,0,4,6,1,0,0,9,4,6,0,1,20,6,1,0,0,7,9,4,0,0,10,10,2,0,0,12,5,2,0,0,7,6,2,0,2,26,13,8,0,0,45,4,2,0,0,5,8,4,0,2,21,19,8,0,0,21,1,1,0,1,22,13,8,0,0,40,4,2,0,0,5,8,4,0,0,20,3,14,0,0,5,6,8,0,0,7,1,1,0,0,2,4,4,0,1,21,14,8,0,0,16,1,1,0,1,22,13,8,0,0,40,4,2,0,0,5,8,4,0,0,20,3,14,0,0,5,6,8,0,0,7,1,1,0,0,2,4,4,0,4,8,6,14,0,0,8,7,8,0,0,8,8,8,0,0,10,18,4,0,1,18,4,8,0,0,6,4,1,0,0,7,8,6,0,0,9,13,4,0,0,16,7,6,0,1,19,6,14,0,0,8,7,8,0,0,9,8,5,0,0,9,4,6,0,0,6,4,1,0,3,8,3,14,0,0,5,6,8,0,0,7,3,14,0,0,5,6,8,0,0,8,8,8,0,0,10,15,4,0,1,12,3,14,0,0,5,6,8,0,0,7,3,14,0,0,5,6,8,0,0,8,6,1,0,1,16,10,6,0,0,11,7,4,0,0,14,2,14,0,0,4,4,14,0,0,6,15,3,0,0,16,10,6,0,1,23,6,1,0,3,18,4,8,0,0,6,10,1,0,0,13,8,6,0,0,9,16,4,0,0,19,10,6,0,0,11,13,4,0,0,16,8,4,0,1,18,2,14,0,0,4,14,8,0,0,15,2,1,0,0,3,10,6,0,1,18,4,8,0,0,5,7,1,0,0,10,2,1,0,0,3,9,4,0,0,10,2,14,0,0,4,4,8,0,0,10,2,14,0,0,4,15,8,0,1,17,6,17,0,0,7,1,1,0,0,7,1,1,0,0,4,7,1,0,0,8,4,4,0,0,10,1,1,0,1,22,3,14,0,0,5,6,8,0,0,7,3,1,0,0,6,7,1,0,0,8,1,1,0,0,3,13,4,0,0,16,8,4,0,1,21,3,14,0,0,5,2,14,0,0,4,12,3,0,0,13,3,1,0,0,5,10,1,0,1,20,6,1,0,0,7,9,4,0,0,10,3,1,0,3,19,6,1,0,3,8,3,14,0,0,5,6,8,0,0,7,3,14,0,0,5,6,8,0,0,8,8,8,0,0,10,20,4,0,0,27,16,8,0,0,18,4,2,0,1,22,4,8,0,0,6,6,1,0,0,9,4,2,0,0,5,6,4,0,0,9,9,4,0,0,10,14,14,0,0,16,4,0,0,1,23,3,14,0,0,5,9,3,0,0,11,6,1,0,6,8,3,14,0,0,5,6,8,0,0,7,8,8,0,0,10,12,4,0,1,19,8,6,0,0,9,16,4,0,0,19,10,6,0,0,11,8,4,0,3,14,11,8,0,0,13,8,8,0,0,10,14,4,0,1,19,8,6,0,0,9,17,4,0,0,20,12,6,0,3,14,11,8,0,0,13,8,8,0,0,10,14,4,0,1,19,8,6,0,0,9,17,4,0,0,20,12,6,0,3,14,19,8,0,0,21,8,8,0,0,10,20,4,0,1,19,8,6,0,0,9,17,4,0,0,20,8,6,0,3,14,3,14,0,0,5,6,8,0,0,7,15,8,0,0,18,8,8,0,0,10,18,4,0,1,19,8,6,0,0,9,16,4,0,3,13,8,8,0,0,10,18,4,0,0,19,16,8,0,0,18,4,2,0,0,12,3,14,0,0,5,6,8,0,0,8,8,2,0,0,16,3,14,0,0,5,6,8,0,0,8,5,2,0,0,13,6,17,0,0,7,9,2,0,1,12,4,8,0,0,5,6,1,0,0,9,4,2,0,0,5,6,4,0,1,12,6,1,0,0,7,23,4,0,0,24,8,2,0,2,12,3,14,0,0,5,12,8,0,0,13,7,1,0,1,17,6,17,0,0,7,1,1,0,0,7,1,1,0,0,5,5,2,0,0,6,4,4,0,0,9,9,2,0,0,13,1,1,0,1,16,7,1,0,0,8,3,4,0,1,16,7,1,0,0,11,8,2,0,0,12,1,1,0,1,16,6,1,0,0,7,20,4,0,0,21,7,1,0,0,8,3,4,0,0,7,5,2,0,0,6,6,4,0,0,7,1,1,0,0,4,9,2,0,0,11,9,2,0,3,12,4,2,0,0,5,9,4,0,0,10,3,14,0,0,5,4,3,0,0,5,6,1,0,3,8,3,14,0,0,5,6,8,0,0,7,8,8,0,0,10,17,4,0,0,24,16,8,0,0,18,4,2,0,0,12,3,14,0,0,5,6,8,0,0,8,8,2,0,1,12,6,17,0,0,7,5,1,0,1,12,3,14,0,0,5,12,8,0,0,13,7,1,0,1,12,3,14,0,0,5,12,8,0,0,13,8,1,0,1,12,7,1,0,0,11,8,2,0,0,12,5,1,0,2,18,4,8,0,0,6,6,1,0,0,9,4,2,0,0,5,6,4,0,1,19,6,1,0,0,7,12,4,0,0,13,7,1,0,0,8,3,4,0,1,26,4,8,0,0,6,5,1,0,0,8,6,1,0,0,7,9,4,0,0,10,7,1,0,0,8,3,4,0,1,20,8,1,0,0,13,5,1,0,2,16,7,1,0,0,8,3,4,0,1,16,7,1,0,0,11,8,2,0,0,14,5,1,0,3,19,8,1,0,0,9,3,4,0],"resultId":"1"}}
I[19:53:51.786] --> textDocument/clangd.fileStatus
V[19:53:51.786] >>> {"jsonrpc":"2.0","method":"textDocument/clangd.fileStatus","params":{"state":"idle","uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp"}}
V[19:53:51.795] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp:134:39:out-of-line definition of 'doExtractSoftMapBounds' does not match any declaration in 'TrenchBroom::Model::GameImpl'
V[19:53:51.826] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp:252:24:out-of-line definition of 'doLoadTextureCollections' does not match any declaration in 'TrenchBroom::Model::GameImpl'
V[19:53:51.826] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp:253:58:no viable conversion from 'TrenchBroom::Model::AttributableNode' to 'const TrenchBroom::Model::Entity'
V[19:53:51.826] Ignored diagnostic. ../common/src/Model/Entity.h:88:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::AttributableNode' to 'const TrenchBroom::Model::Entity &' for 1st argument
V[19:53:51.826] Ignored diagnostic. ../common/src/Model/Entity.h:89:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::AttributableNode' to 'TrenchBroom::Model::Entity &&' for 1st argument
V[19:53:51.826] Ignored diagnostic. ../common/src/Model/Entity.h:85:22:explicit constructor is not a candidate
V[19:53:51.826] Ignored diagnostic. ../common/src/Model/Entity.h:86:22:explicit constructor is not a candidate
V[19:53:51.826] Ignored diagnostic. ../common/src/Model/Game.h:116:75:passing argument to parameter 'entity' here
V[19:53:51.827] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp:303:41:out-of-line definition of 'doExtractTextureCollections' does not match any declaration in 'TrenchBroom::Model::GameImpl'
V[19:53:51.828] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp:317:24:out-of-line definition of 'doUpdateTextureCollections' does not match any declaration in 'TrenchBroom::Model::GameImpl'
V[19:53:51.838] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp:384:52:out-of-line definition of 'doExtractEntityDefinitionFile' does not match any declaration in 'TrenchBroom::Model::GameImpl'
I[19:53:51.872] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/View/FaceAttribsEditor.cpp (16255 symbols, 88370 refs, 468 files)
V[19:53:51.874] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp:557:44:out-of-line definition of 'doExtractEnabledMods' does not match any declaration in 'TrenchBroom::Model::GameImpl'
I[19:53:51.888] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/BrushNode.cpp (15576 symbols, 86563 refs, 464 files)
I[19:53:51.949] --> $/progress
V[19:53:51.949] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"6/25","percentage":24}}}
I[19:53:51.949] --> $/progress
V[19:53:51.949] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"6/25","percentage":24}}}
V[19:53:51.951] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/View/CompilationVariables.cpp (digest:=8DC6F90222B98358)
I[19:53:51.962] --> $/progress
V[19:53:51.963] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"7/25","percentage":28}}}
I[19:53:51.963] --> $/progress
V[19:53:51.963] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"7/25","percentage":28}}}
V[19:53:51.964] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/AttributableNode.cpp (digest:=18C24A71B3B49097)
I[19:53:52.018] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.cpp (15652 symbols, 88377 refs, 475 files)
I[19:53:52.018] Failed to compile /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/TestGame.cpp, index may be incomplete
V[19:53:52.043] <<< {"id":4,"jsonrpc":"2.0","method":"textDocument/codeAction","params":{"context":{"diagnostics":[{"code":"typecheck_nonviable_condition","message":"No viable conversion from 'TrenchBroom::Model::AttributableNode' to 'const TrenchBroom::Model::Entity'","range":{"end":{"character":61,"line":252},"start":{"character":57,"line":252}},"relatedInformation":[{"location":{"range":{"end":{"character":18,"line":87},"start":{"character":12,"line":87}},"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Entity.h"},"message":"Candidate constructor not viable: no known conversion from 'TrenchBroom::Model::AttributableNode' to 'const TrenchBroom::Model::Entity &' for 1st argument"},{"location":{"range":{"end":{"character":18,"line":88},"start":{"character":12,"line":88}},"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Entity.h"},"message":"Candidate constructor not viable: no known conversion from 'TrenchBroom::Model::AttributableNode' to 'TrenchBroom::Model::Entity &&' for 1st argument"},{"location":{"range":{"end":{"character":27,"line":84},"start":{"character":21,"line":84}},"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Entity.h"},"message":"Explicit constructor is not a candidate"},{"location":{"range":{"end":{"character":27,"line":85},"start":{"character":21,"line":85}},"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Entity.h"},"message":"Explicit constructor is not a candidate"},{"location":{"range":{"end":{"character":80,"line":115},"start":{"character":74,"line":115}},"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/Game.h"},"message":"Passing argument to parameter 'entity' here"}],"severity":1,"source":"clang"}]},"range":{"end":{"character":60,"line":252},"start":{"character":59,"line":252}},"textDocument":{"uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp"}}}
I[19:53:52.043] <-- textDocument/codeAction(4)
V[19:53:52.043] ASTWorker running EnumerateTweaks on version 1 of /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp
I[19:53:52.043] --> reply:textDocument/codeAction(4) 0 ms
V[19:53:52.043] >>> {"id":4,"jsonrpc":"2.0","result":[]}
I[19:53:52.043] --> textDocument/clangd.fileStatus
V[19:53:52.043] >>> {"jsonrpc":"2.0","method":"textDocument/clangd.fileStatus","params":{"state":"idle","uri":"file:///Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp"}}
I[19:53:52.087] --> $/progress
V[19:53:52.087] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"8/25","percentage":32}}}
I[19:53:52.087] --> $/progress
V[19:53:52.087] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"8/25","percentage":32}}}
V[19:53:52.088] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/ModelUtils.cpp (digest:=77D95B991459BB26)
I[19:53:52.367] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp (15773 symbols, 88387 refs, 511 files)
I[19:53:52.367] Failed to compile /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameImpl.cpp, index may be incomplete
I[19:53:52.469] --> $/progress
V[19:53:52.469] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"9/25","percentage":36}}}
I[19:53:52.469] --> $/progress
V[19:53:52.469] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"9/25","percentage":36}}}
V[19:53:52.470] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapDocumentCommandFacade.cpp (digest:=7363A6F578FD620A)
I[19:53:52.920] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapViewBase.cpp (16757 symbols, 92024 refs, 581 files)
V[19:53:52.936] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapDocument.cpp:2199:60:no viable conversion from 'TrenchBroom::Model::WorldNode' to 'const TrenchBroom::Model::Entity'
V[19:53:52.936] Ignored diagnostic. ../common/src/Model/Entity.h:88:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::WorldNode' to 'const TrenchBroom::Model::Entity &' for 1st argument
V[19:53:52.936] Ignored diagnostic. ../common/src/Model/Entity.h:89:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::WorldNode' to 'TrenchBroom::Model::Entity &&' for 1st argument
V[19:53:52.936] Ignored diagnostic. ../common/src/Model/Entity.h:85:22:explicit constructor is not a candidate
V[19:53:52.936] Ignored diagnostic. ../common/src/Model/Entity.h:86:22:explicit constructor is not a candidate
V[19:53:52.936] Ignored diagnostic. ../common/src/Model/Game.h:122:88:passing argument to parameter 'entity' here
V[19:53:52.949] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapDocument.cpp:2218:54:no viable conversion from 'TrenchBroom::Model::WorldNode' to 'const TrenchBroom::Model::Entity'
V[19:53:52.949] Ignored diagnostic. ../common/src/Model/Entity.h:88:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::WorldNode' to 'const TrenchBroom::Model::Entity &' for 1st argument
V[19:53:52.949] Ignored diagnostic. ../common/src/Model/Entity.h:89:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::WorldNode' to 'TrenchBroom::Model::Entity &&' for 1st argument
V[19:53:52.949] Ignored diagnostic. ../common/src/Model/Entity.h:85:22:explicit constructor is not a candidate
V[19:53:52.949] Ignored diagnostic. ../common/src/Model/Entity.h:86:22:explicit constructor is not a candidate
V[19:53:52.949] Ignored diagnostic. ../common/src/Model/Game.h:116:75:passing argument to parameter 'entity' here
V[19:53:52.981] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapDocument.cpp:2302:48:no viable conversion from 'TrenchBroom::Model::WorldNode' to 'const TrenchBroom::Model::Entity'
V[19:53:52.981] Ignored diagnostic. ../common/src/Model/Entity.h:88:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::WorldNode' to 'const TrenchBroom::Model::Entity &' for 1st argument
V[19:53:52.981] Ignored diagnostic. ../common/src/Model/Entity.h:89:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::WorldNode' to 'TrenchBroom::Model::Entity &&' for 1st argument
V[19:53:52.981] Ignored diagnostic. ../common/src/Model/Entity.h:85:22:explicit constructor is not a candidate
V[19:53:52.981] Ignored diagnostic. ../common/src/Model/Entity.h:86:22:explicit constructor is not a candidate
V[19:53:52.981] Ignored diagnostic. ../common/src/Model/Game.h:111:55:passing argument to parameter 'entity' here
V[19:53:53.010] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapDocument.cpp:2493:47:no viable conversion from 'TrenchBroom::Model::WorldNode' to 'const TrenchBroom::Model::Entity'
V[19:53:53.010] Ignored diagnostic. ../common/src/Model/Entity.h:88:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::WorldNode' to 'const TrenchBroom::Model::Entity &' for 1st argument
V[19:53:53.010] Ignored diagnostic. ../common/src/Model/Entity.h:89:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::WorldNode' to 'TrenchBroom::Model::Entity &&' for 1st argument
V[19:53:53.010] Ignored diagnostic. ../common/src/Model/Entity.h:85:22:explicit constructor is not a candidate
V[19:53:53.010] Ignored diagnostic. ../common/src/Model/Entity.h:86:22:explicit constructor is not a candidate
V[19:53:53.010] Ignored diagnostic. ../common/src/Model/Game.h:126:71:passing argument to parameter 'entity' here
I[19:53:53.011] --> $/progress
V[19:53:53.011] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"10/25","percentage":40}}}
I[19:53:53.011] --> $/progress
V[19:53:53.011] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"10/25","percentage":40}}}
V[19:53:53.011] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/GameTest.cpp (digest:=CE227B5E56DFDB01)
V[19:53:53.014] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapDocument.cpp:2532:49:no viable conversion from 'TrenchBroom::Model::WorldNode' to 'const TrenchBroom::Model::Entity'
V[19:53:53.014] Ignored diagnostic. ../common/src/Model/Entity.h:88:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::WorldNode' to 'const TrenchBroom::Model::Entity &' for 1st argument
V[19:53:53.014] Ignored diagnostic. ../common/src/Model/Entity.h:89:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::WorldNode' to 'TrenchBroom::Model::Entity &&' for 1st argument
V[19:53:53.014] Ignored diagnostic. ../common/src/Model/Entity.h:85:22:explicit constructor is not a candidate
V[19:53:53.014] Ignored diagnostic. ../common/src/Model/Entity.h:86:22:explicit constructor is not a candidate
V[19:53:53.014] Ignored diagnostic. ../common/src/Model/Game.h:97:62:passing argument to parameter 'entity' here
I[19:53:53.931] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapDocument.cpp (16218 symbols, 92191 refs, 575 files)
I[19:53:53.931] Failed to compile /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapDocument.cpp, index may be incomplete
I[19:53:54.044] --> $/progress
V[19:53:54.044] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"11/25","percentage":44}}}
I[19:53:54.044] --> $/progress
V[19:53:54.044] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"11/25","percentage":44}}}
V[19:53:54.045] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/test/src/IO/EntityModelTest.cpp (digest:=FBDEA38537A9C654)
I[19:53:54.877] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameConfig.cpp (15368 symbols, 69054 refs, 403 files)
I[19:53:54.933] --> $/progress
V[19:53:54.933] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"12/25","percentage":48}}}
I[19:53:54.933] --> $/progress
V[19:53:54.933] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"12/25","percentage":48}}}
V[19:53:54.934] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/NodeCollection.cpp (digest:=26AACABCF8C65FF2)
I[19:53:54.976] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/WorldNode.cpp (15632 symbols, 69565 refs, 438 files)
I[19:53:55.047] --> $/progress
V[19:53:55.047] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"13/25","percentage":52}}}
I[19:53:55.047] --> $/progress
V[19:53:55.047] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"13/25","percentage":52}}}
V[19:53:55.048] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameFactory.cpp (digest:=A5BD4890D7AF279B)
I[19:53:55.426] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/IO/GameConfigParser.cpp (15403 symbols, 86109 refs, 422 files)
I[19:53:55.457] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/NodeTest.cpp (15667 symbols, 72741 refs, 446 files)
I[19:53:55.497] --> $/progress
V[19:53:55.497] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"14/25","percentage":56}}}
I[19:53:55.497] --> $/progress
V[19:53:55.497] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"14/25","percentage":56}}}
V[19:53:55.498] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/EditorContext.cpp (digest:=D6A3313B19B843C0)
I[19:53:55.518] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/AttributableNode.cpp (15391 symbols, 69328 refs, 410 files)
I[19:53:55.519] --> $/progress
V[19:53:55.519] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"15/25","percentage":60}}}
I[19:53:55.519] --> $/progress
V[19:53:55.519] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"15/25","percentage":60}}}
V[19:53:55.519] Indexing /Users/kristian/Documents/Code/TrenchBroom/common/test/src/IO/GameConfigParserTest.cpp (digest:=53B179D017E091E0)
I[19:53:55.550] --> $/progress
V[19:53:55.550] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"16/25","percentage":64}}}
I[19:53:55.593] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/View/CompilationVariables.cpp (15865 symbols, 69996 refs, 430 files)
I[19:53:55.633] --> $/progress
V[19:53:55.633] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"17/25","percentage":68}}}
I[19:53:55.780] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/ModelUtils.cpp (15598 symbols, 69771 refs, 432 files)
I[19:53:55.841] --> $/progress
V[19:53:55.841] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"18/25","percentage":72}}}
V[19:53:56.481] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapDocumentCommandFacade.cpp:642:46:non-const lvalue reference to type 'TrenchBroom::Model::Entity' cannot bind to a value of unrelated type 'TrenchBroom::Model::WorldNode'
V[19:53:56.481] Ignored diagnostic. ../common/src/Model/Game.h:117:51:passing argument to parameter 'entity' here
V[19:53:56.489] Ignored diagnostic. /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/GameTest.cpp:123:41:no viable conversion from 'TrenchBroom::Model::EntityNode' to 'const TrenchBroom::Model::Entity'
V[19:53:56.489] Ignored diagnostic. ../common/src/Model/Entity.h:88:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::EntityNode' to 'const TrenchBroom::Model::Entity &' for 1st argument
V[19:53:56.489] Ignored diagnostic. ../common/src/Model/Entity.h:89:13:candidate constructor not viable: no known conversion from 'TrenchBroom::Model::EntityNode' to 'TrenchBroom::Model::Entity &&' for 1st argument
V[19:53:56.489] Ignored diagnostic. ../common/src/Model/Entity.h:85:22:explicit constructor is not a candidate
V[19:53:56.489] Ignored diagnostic. ../common/src/Model/Entity.h:86:22:explicit constructor is not a candidate
V[19:53:56.489] Ignored diagnostic. ../common/src/Model/Game.h:111:55:passing argument to parameter 'entity' here
I[19:53:57.014] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/GameTest.cpp (15763 symbols, 88640 refs, 461 files)
I[19:53:57.014] Failed to compile /Users/kristian/Documents/Code/TrenchBroom/common/test/src/Model/GameTest.cpp, index may be incomplete
I[19:53:57.039] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapDocumentCommandFacade.cpp (16231 symbols, 89058 refs, 489 files)
I[19:53:57.039] Failed to compile /Users/kristian/Documents/Code/TrenchBroom/common/src/View/MapDocumentCommandFacade.cpp, index may be incomplete
I[19:53:57.102] --> $/progress
V[19:53:57.102] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"19/25","percentage":76}}}
I[19:53:57.124] --> $/progress
V[19:53:57.124] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"20/25","percentage":80}}}
I[19:53:57.730] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/test/src/IO/EntityModelTest.cpp (15552 symbols, 86867 refs, 448 files)
I[19:53:57.803] --> $/progress
V[19:53:57.804] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"21/25","percentage":84}}}
I[19:53:58.142] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/NodeCollection.cpp (15607 symbols, 69155 refs, 417 files)
I[19:53:58.218] --> $/progress
V[19:53:58.218] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"22/25","percentage":88}}}
I[19:53:58.675] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/GameFactory.cpp (15580 symbols, 71170 refs, 456 files)
I[19:53:58.752] --> $/progress
V[19:53:58.752] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"23/25","percentage":92}}}
I[19:53:59.054] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/src/Model/EditorContext.cpp (15614 symbols, 69714 refs, 447 files)
I[19:53:59.111] --> $/progress
V[19:53:59.111] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"report","message":"24/25","percentage":96}}}
I[19:53:59.382] Indexed /Users/kristian/Documents/Code/TrenchBroom/common/test/src/IO/GameConfigParserTest.cpp (15415 symbols, 87675 refs, 437 files)
V[19:53:59.465] BackgroundIndex: building version 2 when background indexer is idle
V[19:53:59.949] BackgroundIndex: serving version 2 (85134823 bytes)
I[19:53:59.957] --> $/progress
V[19:53:59.957] >>> {"jsonrpc":"2.0","method":"$/progress","params":{"token":"backgroundIndexProgress","value":{"kind":"end"}}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment