All files / lib/typescript code-editor.view.ts

0% Statements 0/22
0% Branches 0/2
0% Functions 0/5
0% Lines 0/21

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58                                                                                                                   
import { Common } from '..'
import { IdeState, SourcePath, SrcHighlight } from '../common'
 
import CodeMirror from 'codemirror'
import { getHighlights } from './utils'
import { BehaviorSubject } from 'rxjs'
import { filter, take } from 'rxjs/operators'
 
export class CodeEditorView extends Common.CodeEditorView {
    public readonly highlights$ = new BehaviorSubject<SrcHighlight[]>([])
 
    constructor(params: {
        ideState: IdeState
        path: SourcePath
        config: { [k: string]: unknown }
    }) {
        super({
            ...params,
            language: 'text/typescript',
            config: {
                ...params.config,
                gutters: ['CodeMirror-lint-markers'],
                lint: {
                    options: {
                        editorKind: 'TsCodeEditorView',
                        esversion: 2021,
                    },
                },
            },
        })
        this.ideState.fsMap$
            .pipe(
                filter((fsMap) => fsMap != undefined),
                take(1),
            )
            .subscribe((fsMap) => {
                const highlights = getHighlights(fsMap, fsMap.get(params.path))
                this.highlights$.next(highlights)
            })
 
        CodeMirror.registerHelper('lint', 'javascript', (text, options) => {
            Iif (options.editorKind != 'TsCodeEditorView') {
                return []
            }
            const fsMapBase = this.ideState.fsMap$.getValue()
            Iif (!fsMapBase) {
                return
            }
            const highlights = getHighlights(fsMapBase, text)
            this.highlights$.next(highlights)
            return highlights.map((highlight) => ({
                ...highlight,
                message: highlight.messageText,
            }))
        })
    }
}