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