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)
)
}