utils.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import type { editor as monacoEditor } from 'monaco-editor'
  2. export type EditorSelection = {
  3. selection: string
  4. beforeSelection: string
  5. afterSelection: string
  6. startLineNumber: number
  7. endLineNumber: number
  8. }
  9. export function getEditorSelectionParts(
  10. editor: monacoEditor.IStandaloneCodeEditor
  11. ): EditorSelection | null {
  12. const selection = editor.getSelection()
  13. const model = editor.getModel()
  14. if (!model || !selection) return null
  15. const allLines = model.getLinesContent()
  16. const noSelection =
  17. selection.startLineNumber === selection.endLineNumber &&
  18. selection.startColumn === selection.endColumn
  19. if (noSelection) {
  20. return {
  21. selection: allLines.join('\n'),
  22. beforeSelection: '',
  23. afterSelection: '',
  24. startLineNumber: selection.startLineNumber,
  25. endLineNumber: selection.endLineNumber,
  26. }
  27. }
  28. const startLineIndex = selection.startLineNumber - 1
  29. const endLineIndex = selection.endLineNumber
  30. const beforeLines = allLines.slice(0, startLineIndex)
  31. const afterLines = allLines.slice(endLineIndex)
  32. return {
  33. selection: allLines.slice(startLineIndex, endLineIndex).join('\n'),
  34. beforeSelection: beforeLines.length > 0 ? beforeLines.join('\n') + '\n' : '',
  35. afterSelection: afterLines.length > 0 ? '\n' + afterLines.join('\n') : '',
  36. startLineNumber: selection.startLineNumber,
  37. endLineNumber: selection.endLineNumber,
  38. }
  39. }