Skip to content
This repository was archived by the owner on Sep 6, 2021. It is now read-only.

Commit 1c8a15d

Browse files
committed
Code cleanup after reading @jasonsanjose's helpful suggestions
1 parent d7411eb commit 1c8a15d

File tree

2 files changed

+28
-48
lines changed

2 files changed

+28
-48
lines changed

src/editor/Editor.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,6 @@ define(function (require, exports, module) {
608608
* Responds to language changes, for instance when the file extension is changed.
609609
*/
610610
Editor.prototype._handleDocumentLanguageChanged = function (event) {
611-
var mode = this._getModeFromDocument();
612611
this._codeMirror.setOption("mode", this._getModeFromDocument());
613612
};
614613

@@ -1209,7 +1208,7 @@ define(function (require, exports, module) {
12091208
*
12101209
* @return {?(Object|string)} Name of syntax-highlighting mode, or object containing a "name" property
12111210
* naming the mode along with configuration options required by the mode.
1212-
* See {@link Languages#getLanguageFromFileExtension()} and {@link Language#mode}.
1211+
* See {@link Languages#getLanguageForFileExtension()} and {@link Language#mode}.
12131212
*/
12141213
Editor.prototype.getModeForSelection = function () {
12151214
// Check for mixed mode info
@@ -1242,7 +1241,7 @@ define(function (require, exports, module) {
12421241
/**
12431242
* Gets the syntax-highlighting mode for the document.
12441243
*
1245-
* @return {Object|String} Object or Name of syntax-highlighting mode; see {@link Languages#getLanguageFromFileExtension()} and {@link Language#mode}.
1244+
* @return {Object|String} Object or Name of syntax-highlighting mode; see {@link Languages#getLanguageForFileExtension()} and {@link Language#mode}.
12461245
*/
12471246
Editor.prototype.getModeForDocument = function () {
12481247
return this._codeMirror.getOption("mode");

src/language/LanguageManager.js

Lines changed: 26 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424

2525
/*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50 */
26-
/*global define, $, brackets, CodeMirror, PathUtils, window */
26+
/*global define, $, CodeMirror, PathUtils */
2727

2828
/**
2929
* LanguageManager provides access to the languages supported by Brackets
@@ -79,7 +79,7 @@
7979
* language.modeReady.done(function () {
8080
* // ...
8181
* });
82-
* Note that this will never fire for languages without a mode.
82+
* Note that this will never resolve for languages without a mode.
8383
*/
8484
define(function (require, exports, module) {
8585
"use strict";
@@ -90,37 +90,14 @@ define(function (require, exports, module) {
9090

9191

9292
// State
93-
var _fallbackLanguage = null,
94-
_languages = {},
95-
_fileExtensionsMap = {},
96-
_modeMap = {};
93+
var _fallbackLanguage = null,
94+
_languages = {},
95+
_fileExtensionsToLanguageMap = {},
96+
_modeToLanguageMap = {};
9797

9898

9999
// Helper functions
100100

101-
/**
102-
* Checks whether value is an array. Optionally checks its contents, too.
103-
* Throws an exception in case of a validation error.
104-
* @param {*} value The value to validate
105-
* @param {!string} description A helpful identifier for value
106-
* @param {function(*, !string) validateEntry A function to validate the array's entries with
107-
*/
108-
function _validateArray(value, description, validateEntry) {
109-
var i, entry;
110-
if (!$.isArray(value)) {
111-
throw new Error(description + " must be an array");
112-
}
113-
if (value.length === 0) {
114-
throw new Error(description + " must not be empty");
115-
}
116-
if (validateEntry) {
117-
for (i = 0; i < value.length; i++) {
118-
entry = value[i];
119-
validateEntry(entry, description + "[" + i + "]");
120-
}
121-
}
122-
}
123-
124101
/**
125102
* Checks whether value is a string. Throws an exception otherwise.
126103
* @param {*} value The value to validate
@@ -167,12 +144,12 @@ define(function (require, exports, module) {
167144
* @private
168145
*/
169146
function _setLanguageForMode(mode, language) {
170-
if (_modeMap[mode]) {
171-
console.warn("CodeMirror mode \"" + mode + "\" is already used by language " + _modeMap[mode].name + ", won't register for " + language.name);
147+
if (_modeToLanguageMap[mode]) {
148+
console.warn("CodeMirror mode \"" + mode + "\" is already used by language " + _modeToLanguageMap[mode].name + ", won't register for " + language.name);
172149
return;
173150
}
174151

175-
_modeMap[mode] = language;
152+
_modeToLanguageMap[mode] = language;
176153
}
177154

178155
/**
@@ -199,7 +176,7 @@ define(function (require, exports, module) {
199176
// Make checks below case-INsensitive
200177
extension = extension.toLowerCase();
201178

202-
var language = _fileExtensionsMap[extension];
179+
var language = _fileExtensionsToLanguageMap[extension];
203180
if (!language) {
204181
console.log("Called LanguageManager.getLanguageForFileExtension with an unhandled file extension: " + extension);
205182
}
@@ -212,14 +189,14 @@ define(function (require, exports, module) {
212189
* @param {!string} mode CodeMirror mode
213190
* @return {Language} The language for the provided mode or the fallback language
214191
*/
215-
function getLanguageForMode(mode) {
216-
var language = _modeMap[mode];
192+
function _getLanguageForMode(mode) {
193+
var language = _modeToLanguageMap[mode];
217194
if (language) {
218195
return language;
219196
}
220197

221198
// In case of unsupported languages
222-
console.log("Called LanguageManager.getLanguageForMode with a mode for which no language has been registered:", mode);
199+
console.log("Called LanguageManager._getLanguageForMode with a mode for which no language has been registered:", mode);
223200
return _fallbackLanguage;
224201
}
225202

@@ -246,8 +223,8 @@ define(function (require, exports, module) {
246223
this.id = id;
247224
this.name = name;
248225

249-
this._fileExtensions = [];
250-
this._modeMap = {};
226+
this._fileExtensions = [];
227+
this._modeToLanguageMap = {};
251228

252229
// Since setting the mode is asynchronous when the mode hasn't been loaded yet, offer a reliable way to wait until it is ready
253230
this._modeReady = new $.Deferred();
@@ -332,6 +309,9 @@ define(function (require, exports, module) {
332309

333310
/**
334311
* Adds a file extension to this language.
312+
* Private for now since dependent code would need to by kept in sync with such changes.
313+
* In case we ever open this up, we should think about whether we want to make this
314+
* configurable by the user. If so, the user has to be able to override these calls.
335315
* @param {!string} extension A file extension used by this language
336316
* @return {Language} This language
337317
* @private
@@ -341,11 +321,11 @@ define(function (require, exports, module) {
341321
if (this._fileExtensions.indexOf(extension) === -1) {
342322
this._fileExtensions.push(extension);
343323

344-
var language = _fileExtensionsMap[extension];
324+
var language = _fileExtensionsToLanguageMap[extension];
345325
if (language) {
346326
console.warn("Cannot register file extension \"" + extension + "\" for " + this.name + ", it already belongs to " + language.name);
347327
} else {
348-
_fileExtensionsMap[extension] = this;
328+
_fileExtensionsToLanguageMap[extension] = this;
349329
}
350330
}
351331

@@ -386,14 +366,14 @@ define(function (require, exports, module) {
386366
* Returns either a language associated with the mode or the fallback language.
387367
* Used to disambiguate modes used by multiple languages.
388368
* @param {!string} mode The mode to associate the language with
389-
* @return {Language} This language if it uses the mode, or whatever {@link LanguageManager#getLanguageForMode} returns
369+
* @return {Language} This language if it uses the mode, or whatever {@link LanguageManager#_getLanguageForMode} returns
390370
*/
391371
Language.prototype.getLanguageForMode = function (mode) {
392372
if (mode === this.mode) {
393373
return this;
394374
}
395375

396-
return this._modeMap[mode] || getLanguageForMode(mode);
376+
return this._modeToLanguageMap[mode] || _getLanguageForMode(mode);
397377
};
398378

399379
/**
@@ -408,7 +388,7 @@ define(function (require, exports, module) {
408388
if (mode === this.mode && language !== this) {
409389
throw new Error("A language must always map its mode to itself");
410390
}
411-
this._modeMap[mode] = language;
391+
this._modeToLanguageMap[mode] = language;
412392

413393
return this;
414394
};
@@ -425,6 +405,8 @@ define(function (require, exports, module) {
425405
* @param {string} definition.lineComment Line comment prefix (i.e. "//")
426406
* @param {string|Array.<string>} definition.mode CodeMirror mode (i.e. "htmlmixed"), optionally with a MIME mode defined by that mode ["clike", "text/x-c++src"]
427407
* Unless the mode is located in thirdparty/CodeMirror2/mode/<name>/<name>.js, you need to first load it yourself.
408+
* {@link Language#modeReady} is a promise that resolves when a mode has been loaded and set.
409+
* It will not resolve when no mode is specified.
428410
*
429411
* @return {Language} The new language
430412
**/
@@ -492,7 +474,6 @@ define(function (require, exports, module) {
492474
module.exports = {
493475
defineLanguage: defineLanguage,
494476
getLanguage: getLanguage,
495-
getLanguageForFileExtension: getLanguageForFileExtension,
496-
getLanguageForMode: getLanguageForMode
477+
getLanguageForFileExtension: getLanguageForFileExtension
497478
};
498479
});

0 commit comments

Comments
 (0)