open-autocomplete.ts 910 B

12345678910111213141516171819202122232425
  1. import { EditorView } from '@codemirror/view'
  2. import { startCompletion } from '@codemirror/autocomplete'
  3. import { Transaction } from '@codemirror/state'
  4. import { isInEmptyArgumentNodeForAutocomplete } from '../../utils/tree-query'
  5. import { openContextMenuAnnotation } from '../../extensions/context-menu'
  6. // start autocompletion when the cursor enters an empty pair of braces
  7. // but skip updates caused by context menu open or remote transactions
  8. export const openAutocomplete = () => {
  9. return EditorView.updateListener.of(update => {
  10. if (update.selectionSet || update.docChanged) {
  11. if (
  12. !update.transactions.some(
  13. tr =>
  14. tr.annotation(Transaction.remote) ||
  15. tr.annotation(openContextMenuAnnotation)
  16. )
  17. ) {
  18. if (isInEmptyArgumentNodeForAutocomplete(update.state)) {
  19. startCompletion(update.view)
  20. }
  21. }
  22. }
  23. })
  24. }