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

Use language id instead of CodeMirror mode in CodeHintManager #3270

Merged
merged 2 commits into from
Apr 1, 2013
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 33 additions & 34 deletions src/editor/CodeHintManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -240,61 +240,61 @@ define(function (require, exports, module) {

/**
* The method by which a CodeHintProvider registers its willingness to
* providing hints for editors in a given mode.
* providing hints for editors in a given language.
*
* @param {CodeHintProvider} provider
* The hint provider to be registered, described below.
*
* @param {Array[(string|Object<name: string>)]} modes
* The set of mode names for which the provider is capable of
* providing hints. If the special mode name "all" is included then
* the provider may be called upon to provide hints for any mode.
* @param {Array[(string|Object<name: string>)]} languageIDs
* The set of language ids for which the provider is capable of
* providing hints. If the special language id name "all" is included then
* the provider may be called upon to provide hints for any language.
*
* @param {Integer} priority
* A non-negative number used to break ties among hint providers for a
* particular mode. Providers that register with a higher priority
* will have the opportunity to provide hints at a given mode before
* particular language. Providers that register with a higher priority
* will have the opportunity to provide hints at a given language before
* those with a lower priority. Brackets default providers have
* priority zero.
*/
function registerHintProvider(providerInfo, modes, priority) {
function registerHintProvider(providerInfo, languageIDs, priority) {
var providerObj = { provider: providerInfo,
priority: priority || 0 };

if (modes) {
var modeNames = [], registerInAllModes = false;
var i, currentModeName;
for (i = 0; i < modes.length; i++) {
currentModeName = (typeof modes[i] === "string") ? modes[i] : modes[i].name;
if (currentModeName) {
if (currentModeName === "all") {
registerInAllModes = true;
if (languageIDs) {
var languageIdNames = [], registerForAllLanguages = false;
var i, currentLanguageID;
for (i = 0; i < languageIDs.length; i++) {
currentLanguageID = languageIDs[i];
if (currentLanguageID) {
if (currentLanguageID === "all") {
registerForAllLanguages = true;
break;
} else {
modeNames.push(currentModeName);
languageIdNames.push(currentLanguageID);
}
}
}

if (registerInAllModes) {
if (registerForAllLanguages) {
// if we're registering in all, then we ignore the modeNames array
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missed one ("modeNames") :)

// so that we avoid registering a provider twice
var modeName;
for (modeName in hintProviders) {
if (hintProviders.hasOwnProperty(modeName)) {
hintProviders[modeName].push(providerObj);
hintProviders[modeName].sort(_providerSort);
var languageName;
for (languageName in hintProviders) {
if (hintProviders.hasOwnProperty(languageName)) {
hintProviders[languageName].push(providerObj);
hintProviders[languageName].sort(_providerSort);
}
}
} else {
modeNames.forEach(function (modeName) {
if (modeName) {
if (!hintProviders[modeName]) {
languageIdNames.forEach(function (languageName) {
if (languageName) {
if (!hintProviders[languageName]) {
// initialize a new mode with all providers
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dito ("mode")

hintProviders[modeName] = Array.prototype.concat(hintProviders.all);
hintProviders[languageName] = Array.prototype.concat(hintProviders.all);
}
hintProviders[modeName].push(providerObj);
hintProviders[modeName].sort(_providerSort);
hintProviders[languageName].push(providerObj);
hintProviders[languageName].sort(_providerSort);
}
});
}
Expand All @@ -308,9 +308,8 @@ define(function (require, exports, module) {
* @param {(string|Object<name: string>)} mode
* @return {Array.<{provider: Object, modes: Array.<string>, priority: number}>}
*/
function _getProvidersForMode(mode) {
var modeName = (typeof mode === "string") ? mode : mode.name;
return hintProviders[modeName] || hintProviders.all;
function _getProvidersForLanguage(languageID) {
return hintProviders[languageID] || hintProviders.all;
}

/**
Expand Down Expand Up @@ -395,8 +394,8 @@ define(function (require, exports, module) {
*/
function _beginSession(editor) {
// Find a suitable provider, if any
var mode = editor.getModeForSelection(),
enabledProviders = _getProvidersForMode(mode);
var language = editor.getLanguageForSelection(),
enabledProviders = _getProvidersForLanguage(language.getId());

$.each(enabledProviders, function (index, item) {
if (item.provider.hasHints(editor, lastChar)) {
Expand Down
4 changes: 2 additions & 2 deletions src/extensions/default/JavaScriptCodeHints/HintUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
define(function (require, exports, module) {
"use strict";

var MODE_NAME = "javascript",
var LANGUAGE_ID = "javascript",
SCOPE_MSG_TYPE = "outerScope",
SINGLE_QUOTE = "\'",
DOUBLE_QUOTE = "\"";
Expand Down Expand Up @@ -380,7 +380,7 @@ define(function (require, exports, module) {
exports.BUILTIN_GLOBALS = BUILTIN_GLOBALS;
exports.KEYWORDS = KEYWORDS;
exports.LITERALS = LITERALS;
exports.MODE_NAME = MODE_NAME;
exports.LANGUAGE_ID = LANGUAGE_ID;
exports.SCOPE_MSG_TYPE = SCOPE_MSG_TYPE;
exports.SINGLE_QUOTE = SINGLE_QUOTE;
exports.DOUBLE_QUOTE = DOUBLE_QUOTE;
Expand Down
4 changes: 2 additions & 2 deletions src/extensions/default/JavaScriptCodeHints/ScopeManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -440,8 +440,8 @@ define(function (require, exports, module) {
file = split.file;

if (file.indexOf(".") > 1) { // ignore /.dotfiles
var mode = LanguageManager.getLanguageForPath(entry.fullPath).getMode();
if (mode === HintUtils.MODE_NAME) {
var languageID = LanguageManager.getLanguageForPath(entry.fullPath).getId();
if (languageID === HintUtils.LANGUAGE_ID) {
DocumentManager.getDocumentForPath(path).done(function (document) {
refreshOuterScope(dir, file, document.getText());
});
Expand Down
4 changes: 2 additions & 2 deletions src/extensions/default/JavaScriptCodeHints/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ define(function (require, exports, module) {
cachedHints = null;
cachedType = null;

if (editor && editor.getModeForDocument() === HintUtils.MODE_NAME) {
if (editor && editor.getLanguageForSelection().getId() === HintUtils.LANGUAGE_ID) {
initializeSession(editor);
$(editor)
.on(HintUtils.eventName("change"), function () {
Expand Down Expand Up @@ -447,7 +447,7 @@ define(function (require, exports, module) {
installEditorListeners(EditorManager.getActiveEditor());

var jsHints = new JSHints();
CodeHintManager.registerHintProvider(jsHints, [HintUtils.MODE_NAME], 0);
CodeHintManager.registerHintProvider(jsHints, [HintUtils.LANGUAGE_ID], 0);

// for unit testing
exports.jsHintProvider = jsHints;
Expand Down