index.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { latexIndentService } from './latex-indent-service'
  2. import { shortcuts } from './shortcuts'
  3. import { linting } from './linting'
  4. import { LanguageSupport, indentUnit } from '@codemirror/language'
  5. import { CompletionSource } from '@codemirror/autocomplete'
  6. import { openAutocomplete } from './open-autocomplete'
  7. import { metadata } from './metadata'
  8. import {
  9. argumentCompletionSources,
  10. explicitCommandCompletionSource,
  11. inCommandCompletionSource,
  12. beginEnvironmentCompletionSource,
  13. } from './complete'
  14. import { documentCommands } from './document-commands'
  15. import importOverleafModules from '../../../../../macros/import-overleaf-module.macro'
  16. import { documentOutline } from './document-outline'
  17. import { LaTeXLanguage } from './latex-language'
  18. import { documentEnvironmentNames } from './document-environment-names'
  19. const completionSources: CompletionSource[] = [
  20. ...argumentCompletionSources,
  21. inCommandCompletionSource,
  22. explicitCommandCompletionSource,
  23. beginEnvironmentCompletionSource,
  24. ...importOverleafModules('sourceEditorCompletionSources').map(
  25. (item: any) => item.import.default
  26. ),
  27. ]
  28. export const latex = () => {
  29. return new LanguageSupport(LaTeXLanguage, [
  30. indentUnit.of(' '), // 4 spaces
  31. shortcuts(),
  32. documentOutline.extension,
  33. documentCommands.extension,
  34. documentEnvironmentNames.extension,
  35. latexIndentService(),
  36. linting(),
  37. metadata(),
  38. openAutocomplete(),
  39. ...completionSources.map(completionSource =>
  40. LaTeXLanguage.data.of({
  41. autocomplete: completionSource,
  42. })
  43. ),
  44. ])
  45. }