| 12345678910111213141516171819202122232425262728 |
- import { ViewPlugin } from '@codemirror/view'
- import { pickedCompletion } from '@codemirror/autocomplete'
- import { emitCompletionEvent } from './toolbar/utils/analytics'
- /**
- * A custom view plugin that watches for transactions with the `pickedCompletion` annotation.
- * If the completion label starts with a command, log that command for analytics.
- */
- export const completionLogger = ViewPlugin.define(view => {
- return {
- update(update) {
- for (const tr of update.transactions) {
- const completion = tr.annotation(pickedCompletion)
- if (completion) {
- const command = completionCommand(completion.label)
- if (command) {
- emitCompletionEvent(view, command)
- }
- }
- }
- },
- }
- })
- const completionCommand = (label: string): string | null => {
- const matches = label.match(/^\\(\w+)/)
- return matches ? matches[1] : null
- }
|