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

Commit e9ad8a0

Browse files
committed
Code review: change Language add/remove extension & filename APIs to accept
an array of multiple items in addition to a single item as supported before. With unit tests.
1 parent 78ac6ea commit e9ad8a0

2 files changed

Lines changed: 90 additions & 8 deletions

File tree

src/language/LanguageManager.js

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -466,10 +466,17 @@ define(function (require, exports, module) {
466466
};
467467

468468
/**
469-
* Adds a file extension to this language.
470-
* @param {!string} extension A file extension used by this language
469+
* Adds one or more file extensions to this language.
470+
* @param {!string|Array.<string>>} extension A file extension (or array thereof) used by this language
471471
*/
472472
Language.prototype.addFileExtension = function (extension) {
473+
if (Array.isArray(extension)) {
474+
extension.forEach(this._addFileExtension.bind(this));
475+
} else {
476+
this._addFileExtension(extension);
477+
}
478+
};
479+
Language.prototype._addFileExtension = function (extension) {
473480
// Remove a leading dot if present
474481
if (extension.charAt(0) === ".") {
475482
extension = extension.substr(1);
@@ -493,10 +500,17 @@ define(function (require, exports, module) {
493500
};
494501

495502
/**
496-
* Unregisters a file extension from this language.
497-
* @param {!string} extension File extension to stop using for this language
503+
* Unregisters one or more file extensions from this language.
504+
* @param {!string|Array.<string>} extension File extension (or array thereof) to stop using for this language
498505
*/
499506
Language.prototype.removeFileExtension = function (extension) {
507+
if (Array.isArray(extension)) {
508+
extension.forEach(this._removeFileExtension.bind(this));
509+
} else {
510+
this._removeFileExtension(extension);
511+
}
512+
};
513+
Language.prototype._removeFileExtension = function (extension) {
500514
// Remove a leading dot if present
501515
if (extension.charAt(0) === ".") {
502516
extension = extension.substr(1);
@@ -516,10 +530,17 @@ define(function (require, exports, module) {
516530
};
517531

518532
/**
519-
* Adds a file name to the language which is used to match files that don't have extensions like "Makefile" for example.
520-
* @param {!string} extension An extensionless file name used by this language
533+
* Adds one or more file names to the language which is used to match files that don't have extensions like "Makefile" for example.
534+
* @param {!string|Array.<string>} extension An extensionless file name (or array thereof) used by this language
521535
*/
522536
Language.prototype.addFileName = function (name) {
537+
if (Array.isArray(name)) {
538+
name.forEach(this._addFileName.bind(this));
539+
} else {
540+
this._addFileName(name);
541+
}
542+
};
543+
Language.prototype._addFileName = function (name) {
523544
// Make checks below case-INsensitive
524545
name = name.toLowerCase();
525546

@@ -538,10 +559,17 @@ define(function (require, exports, module) {
538559
};
539560

540561
/**
541-
* Unregisters a file name from this language.
542-
* @param {!string} extension An extensionless file name used by this language
562+
* Unregisters one or more file names from this language.
563+
* @param {!string|Array.<string>} extension An extensionless file name (or array thereof) used by this language
543564
*/
544565
Language.prototype.removeFileName = function (name) {
566+
if (Array.isArray(name)) {
567+
name.forEach(this._removeFileName.bind(this));
568+
} else {
569+
this._removeFileName(name);
570+
}
571+
};
572+
Language.prototype._removeFileName = function (name) {
545573
// Make checks below case-INsensitive
546574
name = name.toLowerCase();
547575

test/spec/LanguageManager-test.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,60 @@ define(function (require, exports, module) {
209209
html.addFileName("Cakefile");
210210
expect(LanguageManager.getLanguageForPath("Cakefile")).toBe(html);
211211
});
212+
213+
it("should add multiple file extensions to languages", function () {
214+
var ruby = LanguageManager.getLanguage("ruby"),
215+
unknown = LanguageManager.getLanguage("unknown");
216+
217+
expect(LanguageManager.getLanguageForPath("foo.1")).toBe(unknown);
218+
expect(LanguageManager.getLanguageForPath("foo.2")).toBe(unknown);
219+
220+
ruby.addFileExtension(["1", "2"]);
221+
222+
expect(LanguageManager.getLanguageForPath("foo.1")).toBe(ruby);
223+
expect(LanguageManager.getLanguageForPath("foo.2")).toBe(ruby);
224+
});
225+
226+
it("should remove multiple file extensions from languages", function () {
227+
var ruby = LanguageManager.getLanguage("ruby"),
228+
unknown = LanguageManager.getLanguage("unknown");
229+
230+
// Assumes test above already ran (tests in this suite are not isolated)
231+
expect(LanguageManager.getLanguageForPath("foo.1")).toBe(ruby);
232+
expect(LanguageManager.getLanguageForPath("foo.2")).toBe(ruby);
233+
234+
ruby.removeFileExtension(["1", "2"]);
235+
236+
expect(LanguageManager.getLanguageForPath("foo.1")).toBe(unknown);
237+
expect(LanguageManager.getLanguageForPath("foo.2")).toBe(unknown);
238+
});
239+
240+
it("should add multiple file names to languages", function () {
241+
var ruby = LanguageManager.getLanguage("ruby"),
242+
unknown = LanguageManager.getLanguage("unknown");
243+
244+
expect(LanguageManager.getLanguageForPath("rubyFile1")).toBe(unknown);
245+
expect(LanguageManager.getLanguageForPath("rubyFile2")).toBe(unknown);
246+
247+
ruby.addFileName(["rubyFile1", "rubyFile2"]);
248+
249+
expect(LanguageManager.getLanguageForPath("rubyFile1")).toBe(ruby);
250+
expect(LanguageManager.getLanguageForPath("rubyFile2")).toBe(ruby);
251+
});
252+
253+
it("should remove multiple file names from languages", function () {
254+
var ruby = LanguageManager.getLanguage("ruby"),
255+
unknown = LanguageManager.getLanguage("unknown");
256+
257+
// Assumes test above already ran (tests in this suite are not isolated)
258+
expect(LanguageManager.getLanguageForPath("rubyFile1")).toBe(ruby);
259+
expect(LanguageManager.getLanguageForPath("rubyFile2")).toBe(ruby);
260+
261+
ruby.removeFileName(["rubyFile1", "rubyFile2"]);
262+
263+
expect(LanguageManager.getLanguageForPath("rubyFile1")).toBe(unknown);
264+
expect(LanguageManager.getLanguageForPath("rubyFile2")).toBe(unknown);
265+
});
212266
});
213267

214268
describe("defineLanguage", function () {

0 commit comments

Comments
 (0)