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

0% Statements 0/25
0% Branches 0/3
0% Functions 0/6
0% Lines 0/24

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 59 60 61 62 63 64 65 66 67 68 69 70                                                                                                                                           
import { Common } from '..'
import { SourcePath, SrcHighlight } from '../common'
 
import CodeMirror from 'codemirror'
import { getHighlights } from './utils'
import { BehaviorSubject } from 'rxjs'
import { mergeMap, take, tap } from 'rxjs/operators'
import { IdeState } from './ide.state'
import { logFactory } from './log-factory.conf'
 
const log = logFactory().getChildLogger('code-editor.view.ts')
 
export class CodeEditorView extends Common.CodeEditorView {
    public readonly highlights$ = new BehaviorSubject<SrcHighlight[]>([])
    public readonly ideState: IdeState
 
    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,
                    },
                },
            },
        })
        log.info('CodeEditorView.constructor()')
 
        this.ideState.environment$
            .pipe(
                take(1),
                tap(({ fsMap }) => {
                    const highlights = getHighlights(
                        fsMap,
                        fsMap.get(params.path),
                    )
                    this.highlights$.next(highlights)
                }),
                mergeMap(() => this.nativeEditor$),
            )
            .subscribe((editor) => {
                editor.setValue(editor.getValue())
            })
 
        CodeMirror.registerHelper('lint', 'javascript', (text, options) => {
            const fsMapBase = this.ideState.fsMap$.getValue()
 
            Iif (options.editorKind != 'TsCodeEditorView' || !fsMapBase) {
                return []
            }
            log.info('CodeEditorView => apply lint plugin')
            const highlights = getHighlights(fsMapBase, text)
            this.highlights$.next(highlights)
            return highlights.map((highlight) => ({
                ...highlight,
                message: highlight.messageText,
            }))
        })
    }
}