export function getIntelliSenseMode()

in src/cpptools.ts [237:306]


export function getIntelliSenseMode(cptVersion: cpt.Version, compiler_path: string, target_arch: Architecture) {
    if (cptVersion >= cpt.Version.v5 && target_arch === undefined) {
        // IntelliSenseMode is optional for CppTools v5+ and is determined by CppTools.
        return undefined;
    }
    const can_use_arm = (cptVersion >= cpt.Version.v4);
    const compiler_name = path.basename(compiler_path || "").toLocaleLowerCase();
    if (compiler_name === 'cl.exe') {
        const clArch = path.basename(path.dirname(compiler_path)).toLocaleLowerCase();
        switch (clArch) {
            case 'arm64':
                return can_use_arm ? 'msvc-arm64' : 'msvc-x64';
            case 'arm':
                return can_use_arm ? 'msvc-arm' : 'msvc-x86';
            case 'x86':
                return 'msvc-x86';
            case 'x64':
            default:
                return 'msvc-x64';
        }
    } else if (compiler_name.indexOf('armclang') >= 0) {
        switch (target_arch) {
            case 'arm64':
                return can_use_arm ? 'clang-arm64' : 'clang-x64';
            case 'arm':
            default:
                return can_use_arm ? 'clang-arm' : 'clang-x86';
        }
    } else if (compiler_name.indexOf('clang') >= 0) {
        switch (target_arch) {
            case 'arm64':
                return can_use_arm ? 'clang-arm64' : 'clang-x64';
            case 'arm':
                return can_use_arm ? 'clang-arm' : 'clang-x86';
            case 'x86':
                return 'clang-x86';
            case 'x64':
            default:
                return 'clang-x64';
        }
    } else if (compiler_name.indexOf('aarch64') >= 0) {
        // Compiler with 'aarch64' in its name may also have 'arm', so check for
        // aarch64 compilers before checking for ARM specific compilers.
        return can_use_arm ? 'gcc-arm64' : 'gcc-x64';
    } else if (compiler_name.indexOf('arm') >= 0) {
        return can_use_arm ? 'gcc-arm' : 'gcc-x86';
    } else if (compiler_name.indexOf('gcc') >= 0 || compiler_name.indexOf('g++') >= 0) {
        switch (target_arch) {
            case 'x86':
                return 'gcc-x86';
            case 'x64':
                return 'gcc-x64';
            case 'arm64':
                return can_use_arm ? 'gcc-arm64' : 'gcc-x64';
            case 'arm':
                return can_use_arm ? 'gcc-arm' : 'gcc-x86';
            default:
                return 'gcc-x64';
        }
    } else {
        // unknown compiler; pick platform defaults.
        if (process.platform === 'win32') {
            return 'msvc-x64';
        } else if (process.platform === 'darwin') {
            return 'clang-x64';
        } else {
            return 'gcc-x64';
        }
    }
}