Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import software.aws.toolkits.core.utils.putNextEntry
import software.aws.toolkits.jetbrains.core.coroutines.EDT
import software.aws.toolkits.jetbrains.core.coroutines.getCoroutineBgContext
import software.aws.toolkits.jetbrains.services.telemetry.ALLOWED_CODE_EXTENSIONS
import software.aws.toolkits.resources.AwsCoreBundle
import software.aws.toolkits.telemetry.AmazonqTelemetry
import java.io.File
Expand Down Expand Up @@ -94,7 +95,7 @@
if (file.isDirectory) return true

val extension = file.extension ?: return false
return FeatureDevBundleConfig.ALLOWED_CODE_EXTENSIONS.contains(extension)
return ALLOWED_CODE_EXTENSIONS.contains(extension)

Check warning on line 98 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/FeatureDevSessionContext.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/FeatureDevSessionContext.kt#L98

Added line #L98 was not covered by tests
}

private fun ignoreFileByExtension(file: VirtualFile) =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,204 +7,3 @@ object QConstants {
const val Q_MARKETPLACE_URI = "https://aws.amazon.com/q/developer/"
const val CODEWHISPERER_LOGIN_HELP_URI = "https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/auth-access.html"
}

// List from Stack Overflow 2023 survey: https://survey.stackoverflow.co/2023/#technology
object FeatureDevBundleConfig {
val ALLOWED_CODE_EXTENSIONS = setOf(
"abap",
"ada",
"adb",
"ads",
"apl",
"asm",
"awk",
"b",
"bas",
"bash",
"bat",
"boo",
"c",
"cbl",
"cc",
"cfc",
"cfm",
"cjs",
"clj",
"cljc",
"cljs",
"cls",
"cmake",
"cob",
"cobra",
"coffee",
"cpp",
"cpy",
"cr",
"cs",
"css",
"csx",
"cxx",
"d",
"dart",
"dfm",
"dpr",
"e",
"el",
"elm",
"erl",
"ex",
"exs",
"f",
"f03",
"f08",
"f77",
"f90",
"f95",
"flow",
"for",
"fs",
"fsi",
"fsx",
"gd",
"go",
"gql",
"graphql",
"groovy",
"gs",
"gsp",
"gst",
"gsx",
"gvy",
"h",
"hack",
"hh",
"hpp",
"hrl",
"hs",
"htm",
"html",
"hy",
"idl",
"io",
"jar",
"java",
"jl",
"js",
"json",
"jsx",
"kt",
"kts",
"lean",
"lgt",
"lhs",
"lisp",
"logtalk",
"lsp",
"lua",
"m",
"ma",
"mak",
"makefile",
"md",
"mjs",
"ml",
"mli",
"mpl",
"ms",
"mu",
"mv",
"n",
"nb",
"nim",
"nix",
"oot",
"oz",
"pas",
"pasm",
"perl",
"php",
"phtml",
"pike",
"pir",
"pl",
"pm",
"pmod",
"pp",
"pro",
"prolog",
"ps1",
"psd1",
"psm1",
"purs",
"py",
"pyw",
"qs",
"r",
"raku",
"rakumod",
"rakutest",
"rb",
"rbw",
"rdata",
"re",
"red",
"reds",
"res",
"rex",
"rexx",
"ring",
"rkt",
"rktl",
"rlib",
"rm",
"rmd",
"roff",
"ron",
"rs",
"ruby",
"s",
"sas",
"sb",
"sb2",
"sb3",
"sc",
"scala",
"scd",
"scm",
"scss",
"sass",
"sh",
"shen",
"sig",
"sml",
"sol",
"sql",
"ss",
"st",
"sv",
"swift",
"t",
"tcl",
"tf",
"trigger",
"ts",
"tsx",
"tu",
"v",
"vala",
"vapi",
"vb",
"vba",
"vbx",
"vhd",
"vhdl",
"vue",
"x",
"xc",
"xi",
"xml",
"yaml",
"yml",
"zig"
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.jetbrains.services.telemetry

import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.components.Service
import com.intellij.openapi.components.service
import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.fileEditor.FileEditorManagerListener
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.util.Alarm
import org.jetbrains.annotations.TestOnly
import software.aws.toolkits.telemetry.IdeTelemetry

class OpenedFileTypesMetricsListener : FileEditorManagerListener {
override fun fileOpened(source: FileEditorManager, file: VirtualFile) {
val extension = file.extension ?: return
source.project.service<OpenedFileTypesMetricsService>().addToExistingTelemetryBatch(extension)
}
}

@Service(Service.Level.PROJECT)
class OpenedFileTypesMetricsService : Disposable {
private val currentOpenedFileTypes = mutableSetOf<String>()
private val alarm = Alarm(Alarm.ThreadToUse.POOLED_THREAD, this)
override fun dispose() {}

init {
scheduleNextMetricEvent()
}

private fun scheduleNextMetricEvent() {
alarm.addRequest(this::emitFileTypeMetric, INTERVAL_BETWEEN_METRICS)
}

@Synchronized
fun emitFileTypeMetric() {
currentOpenedFileTypes.forEach {
emitMetric(it)
}
currentOpenedFileTypes.clear()

Check warning on line 43 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/services/telemetry/OpenedFileTypesMetrics.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/services/telemetry/OpenedFileTypesMetrics.kt#L40-L43

Added lines #L40 - L43 were not covered by tests
if (!ApplicationManager.getApplication().isUnitTestMode) {
scheduleNextMetricEvent()

Check warning on line 45 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/services/telemetry/OpenedFileTypesMetrics.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/services/telemetry/OpenedFileTypesMetrics.kt#L45

Added line #L45 was not covered by tests
}
}

Check warning on line 47 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/services/telemetry/OpenedFileTypesMetrics.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/services/telemetry/OpenedFileTypesMetrics.kt#L47

Added line #L47 was not covered by tests

@TestOnly
fun getOpenedFileTypes(): Set<String> = currentOpenedFileTypes

@Synchronized
fun addToExistingTelemetryBatch(fileExt: String) {
if (fileExt in ALLOWED_CODE_EXTENSIONS) {
currentOpenedFileTypes.add(fileExt)
}
}

private fun emitMetric(openFileExtension: String) =
IdeTelemetry.editCodeFile(project = null, filenameExt = openFileExtension)

Check warning on line 60 in plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/services/telemetry/OpenedFileTypesMetrics.kt

View check run for this annotation

Codecov / codecov/patch

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/services/telemetry/OpenedFileTypesMetrics.kt#L60

Added line #L60 was not covered by tests

companion object {
private const val INTERVAL_BETWEEN_METRICS = 30 * 60 * 1000
}
}
Loading
Loading