Remove ILanguageService.getModeId

This commit is contained in:
Alex Dima 2021-12-08 15:34:29 +01:00
parent 36687f38cb
commit 920fc15008
No known key found for this signature in database
GPG key ID: 39563C1504FDD0C9
7 changed files with 46 additions and 63 deletions

View file

@ -69,7 +69,7 @@ function detectModeId(modelService: IModelService, languageService: ILanguageSer
return null; // we need a resource at least
}
let modeId: string | null = null;
let languageId: string | null = null;
// Data URI: check for encoded metadata
if (resource.scheme === Schemas.data) {
@ -77,7 +77,7 @@ function detectModeId(modelService: IModelService, languageService: ILanguageSer
const mime = metadata.get(DataUri.META_DATA_MIME);
if (mime) {
modeId = languageService.getModeId(mime);
languageId = languageService.getLanguageIdForMimeType(mime);
}
}
@ -85,13 +85,13 @@ function detectModeId(modelService: IModelService, languageService: ILanguageSer
else {
const model = modelService.getModel(resource);
if (model) {
modeId = model.getLanguageId();
languageId = model.getLanguageId();
}
}
// only take if the mode is specific (aka no just plain text)
if (modeId && modeId !== PLAINTEXT_MODE_ID) {
return modeId;
if (languageId && languageId !== PLAINTEXT_MODE_ID) {
return languageId;
}
// otherwise fallback to path based detection

View file

@ -36,7 +36,6 @@ export interface ILanguageService {
// --- reading
isRegisteredLanguageId(languageId: string): boolean;
isRegisteredMimeType(mimeType: string): boolean;
getRegisteredLanguageIds(): string[];
getRegisteredLanguageNames(): string[];
getExtensions(alias: string): string[];
@ -44,8 +43,8 @@ export interface ILanguageService {
getMimeTypeForLanguageId(languageId: string): string | null;
getLanguageName(languageId: string): string | null;
getLanguageIdForLanguageName(languageName: string): string | null;
getLanguageIdForMimeType(mimeType: string): string | null;
getModeIdByFilepathOrFirstLine(resource: URI, firstLine?: string): string | null;
getModeId(commaSeparatedMimetypesOrCommaSeparatedIds: string): string | null;
validateLanguageId(languageId: string): string | null;
getConfigurationFiles(languageId: string): URI[];

View file

@ -80,10 +80,6 @@ export class LanguageService extends Disposable implements ILanguageService {
return this._registry.isRegisteredLanguageId(languageId);
}
public isRegisteredMimeType(mimeType: string): boolean {
return this._registry.isRegisteredMimeType(mimeType);
}
public getRegisteredLanguageIds(): string[] {
return this._registry.getRegisteredLanguageIds();
}
@ -112,12 +108,16 @@ export class LanguageService extends Disposable implements ILanguageService {
return this._registry.getLanguageIdForLanguageName(alias);
}
public getLanguageIdForMimeType(mimeType: string): string | null {
return this._registry.getLanguageIdForMimeType(mimeType);
}
public getModeIdByFilepathOrFirstLine(resource: URI | null, firstLine?: string): string | null {
const modeIds = this._registry.getModeIdsFromFilepathOrFirstLine(resource, firstLine);
return firstOrDefault(modeIds, null);
}
public getModeId(commaSeparatedMimetypesOrCommaSeparatedIds: string | undefined): string | null {
private getModeId(commaSeparatedMimetypesOrCommaSeparatedIds: string | undefined): string | null {
const modeIds = this._registry.extractModeIds(commaSeparatedMimetypesOrCommaSeparatedIds);
return firstOrDefault(modeIds, null);
}

View file

@ -261,10 +261,6 @@ export class LanguagesRegistry extends Disposable {
return hasOwnProperty.call(this._languages, languageId);
}
public isRegisteredMimeType(mimeType: string): boolean {
return hasOwnProperty.call(this._mimeTypesMap, mimeType);
}
public getRegisteredLanguageIds(): string[] {
return Object.keys(this._languages);
}
@ -287,6 +283,13 @@ export class LanguagesRegistry extends Disposable {
return this._lowercaseNameMap[languageNameLower];
}
public getLanguageIdForMimeType(mimeType: string): string | null {
if (hasOwnProperty.call(this._mimeTypesMap, mimeType)) {
return this._mimeTypesMap[mimeType];
}
return null;
}
public getConfigurationFiles(languageId: string): URI[] {
if (!hasOwnProperty.call(this._languages, languageId)) {
return [];

View file

@ -31,11 +31,12 @@ export class Colorizer {
public static colorizeElement(themeService: IStandaloneThemeService, languageService: ILanguageService, domNode: HTMLElement, options: IColorizerElementOptions): Promise<void> {
options = options || {};
let theme = options.theme || 'vs';
let mimeType = options.mimeType || domNode.getAttribute('lang') || domNode.getAttribute('data-lang');
const mimeType = options.mimeType || domNode.getAttribute('lang') || domNode.getAttribute('data-lang');
if (!mimeType) {
console.error('Mode not detected');
return Promise.resolve();
}
const languageId = languageService.getLanguageIdForMimeType(mimeType) || mimeType;
themeService.setTheme(theme);
@ -45,10 +46,10 @@ export class Colorizer {
const trustedhtml = ttPolicy?.createHTML(str) ?? str;
domNode.innerHTML = trustedhtml as string;
};
return this.colorize(languageService, text || '', mimeType, options).then(render, (err) => console.error(err));
return this.colorize(languageService, text || '', languageId, options).then(render, (err) => console.error(err));
}
public static colorize(languageService: ILanguageService, text: string, mimeType: string, options: IColorizerOptions | null | undefined): Promise<string> {
public static colorize(languageService: ILanguageService, text: string, languageId: string, options: IColorizerOptions | null | undefined): Promise<string> {
const languageIdCodec = languageService.languageIdCodec;
let tabSize = 4;
if (options && typeof options.tabSize === 'number') {
@ -59,20 +60,19 @@ export class Colorizer {
text = text.substr(1);
}
let lines = strings.splitLines(text);
let language = languageService.getModeId(mimeType);
if (!language) {
if (!languageService.isRegisteredLanguageId(languageId)) {
return Promise.resolve(_fakeColorize(lines, tabSize, languageIdCodec));
}
// Send out the event to create the mode
languageService.triggerMode(language);
languageService.triggerMode(languageId);
const tokenizationSupport = TokenizationRegistry.get(language);
const tokenizationSupport = TokenizationRegistry.get(languageId);
if (tokenizationSupport) {
return _colorize(lines, tabSize, tokenizationSupport, languageIdCodec);
}
const tokenizationSupportPromise = TokenizationRegistry.getPromise(language);
const tokenizationSupportPromise = TokenizationRegistry.getPromise(languageId);
if (tokenizationSupportPromise) {
// A tokenizer will be registered soon
return new Promise<string>((resolve, reject) => {
@ -95,7 +95,7 @@ export class Colorizer {
timeout.dispose();
timeout = null;
}
const tokenizationSupport = TokenizationRegistry.get(language!);
const tokenizationSupport = TokenizationRegistry.get(languageId!);
if (tokenizationSupport) {
_colorize(lines, tabSize, tokenizationSupport, languageIdCodec).then(resolve, reject);
return;
@ -107,7 +107,7 @@ export class Colorizer {
timeout = new TimeoutTimer();
timeout.cancelAndSet(execute, 500);
listener = TokenizationRegistry.onDidChange((e) => {
if (e.changedLanguages.indexOf(language!) >= 0) {
if (e.changedLanguages.indexOf(languageId!) >= 0) {
execute();
}
});

View file

@ -744,13 +744,14 @@ export class MonarchTokenizer implements modes.ITokenizationSupport {
}
const computeNewStateForEmbeddedMode = (enteringEmbeddedMode: string) => {
// substitute language alias to known modes to support syntax highlighting
let enteringEmbeddedLanguageId = this._languageService.getLanguageIdForLanguageName(enteringEmbeddedMode);
if (enteringEmbeddedLanguageId) {
enteringEmbeddedMode = enteringEmbeddedLanguageId;
}
// support language names, mime types, and language ids
const languageId = (
this._languageService.getLanguageIdForLanguageName(enteringEmbeddedMode)
|| this._languageService.getLanguageIdForMimeType(enteringEmbeddedMode)
|| enteringEmbeddedMode
);
const embeddedModeData = this._getNestedEmbeddedModeData(enteringEmbeddedMode);
const embeddedModeData = this._getNestedEmbeddedModeData(languageId);
if (pos < lineLength) {
// there is content from the embedded mode on this line
@ -846,44 +847,24 @@ export class MonarchTokenizer implements modes.ITokenizationSupport {
return MonarchLineStateFactory.create(stack, embeddedModeData);
}
private _getNestedEmbeddedModeData(mimetypeOrModeId: string): EmbeddedModeData {
let nestedModeId = this._locateMode(mimetypeOrModeId);
if (nestedModeId) {
let tokenizationSupport = modes.TokenizationRegistry.get(nestedModeId);
if (tokenizationSupport) {
return new EmbeddedModeData(nestedModeId, tokenizationSupport.getInitialState());
}
private _getNestedEmbeddedModeData(languageId: string): EmbeddedModeData {
if (!this._languageService.isRegisteredLanguageId(languageId)) {
return new EmbeddedModeData(languageId, NULL_STATE);
}
return new EmbeddedModeData(nestedModeId || NULL_MODE_ID, NULL_STATE);
}
private _locateMode(mimetypeOrModeId: string): string | null {
if (!mimetypeOrModeId) {
return null;
}
const isRegisteredLanguageId = this._languageService.isRegisteredLanguageId(mimetypeOrModeId);
const isRegisteredMimeType = this._languageService.isRegisteredMimeType(mimetypeOrModeId);
if (!isRegisteredLanguageId && !isRegisteredMimeType) {
return null;
}
if (mimetypeOrModeId === this._languageId) {
// embedding myself...
return mimetypeOrModeId;
}
const languageId = this._languageService.getModeId(mimetypeOrModeId);
if (languageId) {
if (languageId !== this._languageId) {
// Fire mode loading event
this._languageService.triggerMode(languageId);
this._embeddedModes[languageId] = true;
}
return languageId;
}
const tokenizationSupport = modes.TokenizationRegistry.get(languageId);
if (tokenizationSupport) {
return new EmbeddedModeData(languageId, tokenizationSupport.getInitialState());
}
return new EmbeddedModeData(languageId || NULL_MODE_ID, NULL_STATE);
}
}
/**

View file

@ -168,7 +168,7 @@ export class NotebookCellTextModel extends Disposable implements ICell {
// Init language from text model
// The language defined in the cell might not be supported in the editor so the text model might be using the default fallback
// If so let's not modify the language
if (!(this._languageService.getModeId(this.language) === null && (this._textModel.getLanguageId() === 'plaintext' || this._textModel.getLanguageId() === 'jupyter'))) {
if (!(this._languageService.isRegisteredLanguageId(this.language) === false && (this._textModel.getLanguageId() === 'plaintext' || this._textModel.getLanguageId() === 'jupyter'))) {
this.language = this._textModel.getLanguageId();
}