mirror of
https://github.com/Microsoft/vscode
synced 2024-08-27 04:49:35 +00:00
Remove ILanguageService.getModeId
This commit is contained in:
parent
36687f38cb
commit
920fc15008
|
@ -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
|
||||
|
|
|
@ -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[];
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 [];
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue