ultimatepp/uppsrc/ide/clang/util.cpp
2025-02-13 09:57:45 +01:00

106 lines
2.2 KiB
C++

#include "clang.h"
bool LibClangEnabled = true;
bool AssistDiagnostics;
bool AutoIndexer;
bool RelaxedIndexerDependencies = true;
int IndexerThreads;
int ParsedFiles;
int LibClangCppVersion = 17;
void ClangConfigSerialize(Stream& s)
{
int version = 1;
s % version
% LibClangEnabled
% AssistDiagnostics
% AutoIndexer
% IndexerThreads
% ParsedFiles
;
if(version >= 1)
s % LibClangCppVersion;
}
void ClangConfigSetDefaults()
{
uint64 total, avail;
GetSystemMemoryStatus(total, avail);
int mem_mb = int(total >> 20);
ParsedFiles = clamp((mem_mb - 4000) / 500, 1, 12);
IndexerThreads = max(min(CPU_Cores() - 2, (mem_mb - 4000) / 1000), 1);
// AutoIndexer = CPU_Cores() >= 8 && mem_mb > 8000;
AutoIndexer = true;
LibClangCppVersion = 17;
}
INITBLOCK {
ClangConfigSetDefaults();
}
void PutAssist(const char *s)
{
GuiLock __;
if(AssistDiagnostics)
PutConsole(s);
}
bool IsCppSourceFile(const String& path)
{
String ext = ToLower(GetFileExt(path));
return findarg(ext, ".cpp", ".cc", ".cxx", ".icpp") >= 0;
}
bool IsSourceFile(const String& path)
{
String ext = ToLower(GetFileExt(path));
return findarg(ext, ".cpp", ".cc", ".cxx", ".icpp", ".c") >= 0;
}
bool IsHeaderFile(const String& path)
{
String ext = ToLower(GetFileExt(path));
return findarg(ext, ".h", ".hxx", ".hpp", ".hh") >= 0;
}
bool IsStruct(int kind)
{
return findarg(kind, CXCursor_StructDecl, CXCursor_UnionDecl, CXCursor_ClassDecl,
CXCursor_ClassTemplate) >= 0;
}
bool IsTemplate(int kind)
{
return findarg(kind, CXCursor_FunctionTemplate, CXCursor_ClassTemplate) >= 0;
}
bool IsFunction(int kind)
{
return findarg(kind, CXCursor_FunctionTemplate, CXCursor_FunctionDecl, CXCursor_Constructor,
CXCursor_Destructor, CXCursor_ConversionFunction, CXCursor_CXXMethod) >= 0;
}
bool IsVariable(int kind)
{
return findarg(kind, CXCursor_VarDecl, CXCursor_FieldDecl) >= 0;
}
int FindId(const String& s, const String& id) {
if(id.GetCount() == 0)
return -1;
int q = 0;
for(;;) {
q = s.Find(id, q);
if(q < 0)
return -1;
if((q == 0 || !iscid(s[q - 1])) && // character before id
(q + id.GetCount() >= s.GetCount() || !iscid(s[q + id.GetCount()]))) // and after..
return q;
q++;
}
};