MCPcopy Create free account
hub / github.com/microsoft/vscode-cpptools / activate

Function activate

Extension/src/LanguageServer/extension.ts:160–279  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

158 * activate: set up the extension for language services
159 */
160export 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();

Callers

nothing calls this directly

Calls 15

getUIFunction · 0.90
getCustomConfigProvidersFunction · 0.90
instrumentFunction · 0.90
sendActivationTelemetryFunction · 0.85
reportMacCrashesFunction · 0.85
initVcpkgDatabaseFunction · 0.85

Tested by

no test coverage detected