export async function getCppToolsApi()

in api.ts [313:358]


export async function getCppToolsApi(version: Version): Promise<CppToolsApi | undefined> {
    let cpptools: vscode.Extension<any> | undefined = vscode.extensions.getExtension("ms-vscode.cpptools");
    let extension: CppToolsApi | CppToolsExtension | undefined = undefined;
    let api: CppToolsApi | undefined = undefined;

    if (cpptools) {
        if (!cpptools.isActive) { 
            extension = await cpptools.activate();
        } else {
            extension = cpptools.exports;
        }

        if (isCppToolsExtension(extension)) {
            // ms-vscode.cpptools > 0.17.5
            try {
                api = extension.getApi(version);
            } catch (err) {
                // Unfortunately, ms-vscode.cpptools [0.17.6, 0.18.1] throws a RangeError if you specify a version greater than v1.
                // These versions of the extension will not be able to act on the newer interface and v2 is a superset of v1, so we can safely fall back to v1.
                let e: RangeError = <RangeError>err;
                if (e && e.message && e.message.startsWith("Invalid version")) {
                    api = extension.getApi(Version.v1);
                }
            }

            if (version !== Version.v1) {
                if (!api.getVersion) {
                    console.warn(`[vscode-cpptools-api] version ${version} requested, but is not available in the current version of the cpptools extension. Using version 1 instead.`);
                } else if (version !== api.getVersion()) {
                    console.warn(`[vscode-cpptools-api] version ${version} requested, but is not available in the current version of the cpptools extension. Using version ${api.getVersion()} instead.`);
                }
            }
        } else if (isLegacyCppToolsApi(extension)) {
            // ms-vscode.cpptools version 0.17.5
            api = extension;
            if (version !== Version.v0) {
                console.warn(`[vscode-cpptools-api] version ${version} requested, but is not available in version 0.17.5 of the cpptools extension. Using version 0 instead.`);
            }
        } else {
            console.warn('[vscode-cpptools-api] No cpptools API was found.')
        }
    } else {
        console.warn('[vscode-cpptools-api] C/C++ extension is not installed');
    }
    return api;
}