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, })) }) } } |