export function activate()

in packages/core/src/shared/filetypes.ts [63:145]


export function activate(): void {
    globals.context.subscriptions.push(
        vscode.window.onDidChangeActiveTextEditor(async (editor) => {
            const doc = editor?.document
            // Ignore output:// files.
            // Ignore *.git files (from the builtin git extension).
            // Ignore ~/.vscode/argv.json (vscode internal file).
            const isNoise =
                !doc || doc.uri.scheme === 'git' || doc.uri.scheme === 'output' || doc.fileName.endsWith('argv.json')
            if (isNoise) {
                return
            }

            const basename = path.basename(doc.fileName)
            let fileExt: string | undefined = path.extname(doc.fileName).trim()
            fileExt = fileExt !== '' ? fileExt : undefined // Telemetry client will fail on empty string.

            if (isCodeFile(basename)) {
                const metric: IdeEditCodeFile = {
                    filenameExt: fileExt,
                    result: 'Succeeded',
                    passive: true, // IDE usage != extension usage.
                }
                const isSameMetricPending = await globals.telemetry.findPendingMetric('ide_editCodeFile', metric, [
                    'filenameExt',
                ])
                if (!isSameMetricPending) {
                    // Avoid redundant/duplicate metrics.
                    telemetry.ide_editCodeFile.emit(metric)
                }
            }

            const isAwsFileExt = isAwsFiletype(doc)
            const isSchemaHandled = globals.schemaService.isMapped(doc.uri)
            const cfnTemplate = CloudFormation.isValidFilename(doc.uri)
                ? await CloudFormation.tryLoad(doc.uri)
                : undefined
            const isCfnTemplate = cfnTemplate?.template !== undefined

            if (!isAwsFileExt && !isSchemaHandled && !isCfnTemplate) {
                return
            }

            // TODO: ask schemaService for the precise filetype.
            let telemKind = isAwsConfig(doc.fileName) ? 'awsCredentials' : langidToAwsFiletype(doc.languageId)
            if (isCfnTemplate) {
                telemKind = cfnTemplate.kind === 'sam' ? 'cloudformationSam' : 'cloudformation'
            } else if (telemKind === 'other') {
                telemKind = isSchemaHandled ? 'cloudformation' : 'other'
            }

            // HACK: for "~/.aws/foo" vscode sometimes _only_ emits "~/.aws/foo.git".
            if (telemKind === 'awsCredentials' && fileExt === '.git') {
                fileExt = undefined
            }

            // Ensure nice syntax highlighting for ~/.aws/ files.
            if (
                telemKind === 'awsCredentials' &&
                doc.languageId !== 'ini' &&
                (basename === 'credentials' || basename === 'config')
            ) {
                await vscode.languages.setTextDocumentLanguage(doc, 'ini')
            }

            const metric: FileEditAwsFile = {
                awsFiletype: telemKind,
                passive: true,
                result: 'Succeeded',
                filenameExt: fileExt,
            }
            const isSameMetricPending = await globals.telemetry.findPendingMetric('file_editAwsFile', metric, [
                'awsFiletype',
                'filenameExt',
            ])
            if (isSameMetricPending) {
                return // Avoid redundant/duplicate metrics.
            }

            telemetry.file_editAwsFile.emit(metric)
        }, undefined)
    )
}