{"version":3,"sources":["browser/monaco-languages.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAC,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAC,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAa,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAE1E,OAAO,EAAC,QAAQ,EAAE,eAAe,EAAC,MAAM,2CAA2C,CAAC;AACpF,OAAO,GAAG,MAAM,6BAA6B,CAAC;AAC9C,OAAO,EAAC,0BAA0B,EAAC,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AAEzE,MAAM,WAAW,uBAAuB;IACpC,uBAAuB,CAAC,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAAC,iBAAiB,EAAE,GAAG,SAAS,CAAC,CAAC;IAEhI,sBAAsB,CAAC,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAA;CACxH;AAED,qBACa,eAAgB,YAAW,eAAe;IAEnD,QAAQ,CAAC,wBAAwB,EAAE,uBAAuB,EAAE,CAAM;IAElE,SAAS,CAAC,QAAQ,CAAC,MAAM,0CAAiD;IAGvC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,yBAAyB,CAAC;IAErF,IAAI,SAAS,IAAI,QAAQ,EAAE,CAE1B;IAED,+BAA+B,CAAC,QAAQ,EAAE,uBAAuB,GAAG,UAAU;IAU9E,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAKrD,SAAS,CAAC,IAAI,IAAI,IAAI;IAOtB,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAuBvC,SAAS,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,uBAAuB,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;CAgCnH","file":"../../src/browser/monaco-languages.d.ts","sourcesContent":["import {WorkspaceSymbolParams} from 'vscode-languageserver-protocol';\r\nimport {CancellationToken, Disposable, MaybePromise, Mutable} from '@tartjs/core/lib/common';\r\nimport {Diagnostic, SymbolInformation} from 'vscode-languageserver-types';\r\nimport {inject, injectable, postConstruct} from 'inversify';\r\nimport {Language, LanguageService} from '@tartjs/core/lib/browser/language-service';\r\nimport URI from '@tartjs/core/lib/common/uri';\r\nimport {MonacoDiagnosticCollection} from './monaco-diagnostic-collection';\r\nimport {ProtocolToMonacoConverter} from './protocol-to-monaco-converter';\r\n\r\nexport interface WorkspaceSymbolProvider {\r\n    provideWorkspaceSymbols(params: WorkspaceSymbolParams, token: CancellationToken): MaybePromise<SymbolInformation[] | undefined>;\r\n\r\n    resolveWorkspaceSymbol?(symbol: SymbolInformation, token: CancellationToken): Thenable<SymbolInformation | undefined>\r\n}\r\n\r\n@injectable()\r\nexport class MonacoLanguages implements LanguageService {\r\n\r\n    readonly workspaceSymbolProviders: WorkspaceSymbolProvider[] = [];\r\n\r\n    protected readonly makers = new Map<string, MonacoDiagnosticCollection>();\r\n\r\n    // @inject(ProblemManager) protected readonly problemManager: ProblemManager;\r\n    @inject(ProtocolToMonacoConverter) protected readonly p2m: ProtocolToMonacoConverter;\r\n\r\n    get languages(): Language[] {\r\n        return [...this.mergeLanguages(monaco.languages.getLanguages()).values()];\r\n    }\r\n\r\n    registerWorkspaceSymbolProvider(provider: WorkspaceSymbolProvider): Disposable {\r\n        this.workspaceSymbolProviders.push(provider);\r\n        return Disposable.create(() => {\r\n            const index = this.workspaceSymbolProviders.indexOf(provider);\r\n            if (index !== -1) {\r\n                this.workspaceSymbolProviders.splice(index, 1);\r\n            }\r\n        });\r\n    }\r\n\r\n    getLanguage(languageId: string): Language | undefined {\r\n        return this.mergeLanguages(monaco.languages.getLanguages().filter(language => language.id === languageId)).get(languageId);\r\n    }\r\n\r\n    @postConstruct()\r\n    protected init(): void {\r\n        // for (const uri of this.problemManager.getUris()) {\r\n        //     this.updateMarkers(new URI(uri));\r\n        // }\r\n        // this.problemManager.onDidChangeMarkers(uri => this.updateMarkers(uri));\r\n    }\r\n\r\n    protected updateMarkers(uri: URI): void {\r\n        const uriString = uri.toString();\r\n        const owners = new Map<string, Diagnostic[]>();\r\n        // for (const marker of this.problemManager.findMarkers({ uri })) {\r\n        //     const diagnostics = owners.get(marker.owner) || [];\r\n        //     diagnostics.push(marker.data);\r\n        //     owners.set(marker.owner, diagnostics);\r\n        // }\r\n        const toClean = new Set<string>(this.makers.keys());\r\n        for (const [owner, diagnostics] of owners) {\r\n            toClean.delete(owner);\r\n            const collection = this.makers.get(owner) || new MonacoDiagnosticCollection(owner, this.p2m);\r\n            collection.set(uriString, diagnostics);\r\n            this.makers.set(owner, collection);\r\n        }\r\n        for (const owner of toClean) {\r\n            const collection = this.makers.get(owner);\r\n            if (collection) {\r\n                collection.set(uriString, []);\r\n            }\r\n        }\r\n    }\r\n\r\n    protected mergeLanguages(registered: monaco.languages.ILanguageExtensionPoint[]): Map<string, Mutable<Language>> {\r\n        const languages = new Map<string, Mutable<Language>>();\r\n        for (const {id, aliases, extensions, filenames} of registered) {\r\n            const merged = languages.get(id) || {\r\n                id,\r\n                name: '',\r\n                extensions: new Set(),\r\n                filenames: new Set()\r\n            };\r\n            if (!merged.name && aliases && aliases.length) {\r\n                merged.name = aliases[0];\r\n            }\r\n            if (extensions && extensions.length) {\r\n                for (const extension of extensions) {\r\n                    merged.extensions.add(extension);\r\n                }\r\n            }\r\n            if (filenames && filenames.length) {\r\n                for (const filename of filenames) {\r\n                    merged.filenames.add(filename);\r\n                }\r\n            }\r\n            languages.set(id, merged);\r\n        }\r\n        for (const [id, language] of languages) {\r\n            if (!language.name) {\r\n                language.name = id;\r\n            }\r\n        }\r\n        return languages;\r\n    }\r\n\r\n}\r\n"]}