()
| 158 | * activate: set up the extension for language services |
| 159 | */ |
| 160 | export async function activate(): Promise<void> { |
| 161 | sendActivationTelemetry(); |
| 162 | const checkForConflictingExtensions: PersistentState<boolean> = new PersistentState<boolean>("CPP." + util.packageJson.version + ".checkForConflictingExtensions", true); |
| 163 | if (checkForConflictingExtensions.Value) { |
| 164 | checkForConflictingExtensions.Value = false; |
| 165 | const clangCommandAdapterActive: boolean = vscode.extensions.all.some((extension: vscode.Extension<any>): boolean => |
| 166 | extension.isActive && extension.id === "mitaki28.vscode-clang"); |
| 167 | if (clangCommandAdapterActive) { |
| 168 | telemetry.logLanguageServerEvent("conflictingExtension"); |
| 169 | } |
| 170 | } |
| 171 | |
| 172 | clients = new ClientCollection(); |
| 173 | ui = getUI(); |
| 174 | |
| 175 | // There may have already been registered CustomConfigurationProviders. |
| 176 | // Request for configurations from those providers. |
| 177 | clients.forEach(client => { |
| 178 | getCustomConfigProviders().forEach(provider => void client.onRegisterCustomConfigurationProvider(provider)); |
| 179 | }); |
| 180 | |
| 181 | // These handlers for didChangeTextDocument and didOpenTextDocument are intentionally synchronous and are |
| 182 | // intended primarily to maintain openFileVersions with the most recent versions of files, as quickly as |
| 183 | // possible, without being delayed by awaits or queued behind other LSP messages, etc.. |
| 184 | disposables.push(vscode.workspace.onDidChangeTextDocument(onDidChangeTextDocument)); |
| 185 | disposables.push(vscode.workspace.onDidOpenTextDocument(onDidOpenTextDocument)); |
| 186 | |
| 187 | disposables.push(vscode.workspace.onDidChangeConfiguration(onDidChangeSettings)); |
| 188 | disposables.push(vscode.window.onDidChangeTextEditorVisibleRanges((e) => clients.ActiveClient.enqueue(async () => onDidChangeTextEditorVisibleRanges(e)))); |
| 189 | disposables.push(vscode.window.onDidChangeActiveTextEditor((e) => clients.ActiveClient.enqueue(async () => onDidChangeActiveTextEditor(e)))); |
| 190 | ui.didChangeActiveEditor(); // Handle already active documents (for non-cpp files that we don't register didOpen). |
| 191 | disposables.push(vscode.window.onDidChangeTextEditorSelection((e) => clients.ActiveClient.enqueue(async () => onDidChangeTextEditorSelection(e)))); |
| 192 | disposables.push(vscode.window.onDidChangeVisibleTextEditors((e) => clients.ActiveClient.enqueue(async () => onDidChangeVisibleTextEditors(e)))); |
| 193 | updateLanguageConfigurations(); |
| 194 | |
| 195 | reportMacCrashes(); |
| 196 | |
| 197 | vcpkgDbPromise = initVcpkgDatabase(); |
| 198 | |
| 199 | await registerCommands(true); |
| 200 | |
| 201 | vscode.tasks.onDidStartTask(() => void getActiveClient().PauseCodeAnalysis().catch(logAndReturn.undefined)); |
| 202 | |
| 203 | vscode.tasks.onDidEndTask(async event => { |
| 204 | await getActiveClient().ResumeCodeAnalysis(); |
| 205 | if (event.execution.task.definition.type === CppBuildTaskProvider.CppBuildScriptType |
| 206 | || event.execution.task.name.startsWith(configPrefix)) { |
| 207 | if (event.execution.task.scope !== vscode.TaskScope.Global && event.execution.task.scope !== vscode.TaskScope.Workspace) { |
| 208 | const folder: vscode.WorkspaceFolder | undefined = event.execution.task.scope; |
| 209 | if (folder) { |
| 210 | const settings: CppSettings = new CppSettings(folder.uri); |
| 211 | if (settings.codeAnalysisRunOnBuild && settings.clangTidyEnabled) { |
| 212 | void clients.getClientFor(folder.uri).handleRunCodeAnalysisOnAllFiles().catch(logAndReturn.undefined); |
| 213 | } |
| 214 | return; |
| 215 | } |
| 216 | } |
| 217 | const settings: CppSettings = new CppSettings(); |
nothing calls this directly
no test coverage detected