Language switcher: connect to prefs & clean up some code#8444
Language switcher: connect to prefs & clean up some code#8444JeffryBooher merged 5 commits intomasterfrom
Conversation
* Make LanguageManager the official public API that is used to set per-file overrides, rather than proxying through Document objects - remove Document.setLanguageOverride() * Clear path overrides when switching projects, so it's more obvious that it's not something that gets persisted across sessions * Simplify how JS Code Hints listen for language updates: remove dependency on "currentDocumentLanguageChanged" event; remove unneeded extra 'if' tests
permanent file extension mapping to preferences, based on the current file's path-specific language override (if any) and its file extension.
There was a problem hiding this comment.
previous !== current is guaranteed to be true for all "activeEditorChange" events, so I removed that check
…e doc's current language is already the default (i.e. there's no path-specific override). DropdownButton changes: * Support disabled items * Fix bug #8433 (Page Up/Down work oddly) - Only wrap around to other end of list when using arrow keys. Page Up/Down 'stick' at start/end of list instead (so they will act like Home/End when there's no scrollbar). * Add Home/End key support
|
@peterflynn Is this something that should be merged for Release 0.42? |
|
@redmunds Originally I was hoping so, but it seems like we're out of runway at this point... |
|
The feature will be a little more confusing if left as-is for a sprint, but we can message that in the release notes & update notification |
|
Yeah, there's more changes than I thought -- best to wait on this one. |
There was a problem hiding this comment.
Session can't be null here either
There was a problem hiding this comment.
Hmm, actually it looks entirely unused...
There was a problem hiding this comment.
we should make that note in the doc and type it as optional
There was a problem hiding this comment.
I'd rather not explicitly indicate it's ok to write code which passes null for that arg, unless we've verified it's correct for it to be ignoring the arg :-) And that seems outside the scope of this PR -- but I'll add a TODO to draw attention to it.
|
After changing the language of a custom file type (.jst) to "Javascript" then selecting "set as default for .jst files", the "Javascript" item in the droplist doesn't have (default) next to it. Seems like we want it to say "default" if we changed the default. |
|
When selecting the item "Set as Default for files" (when enabled), nothing happens. The drop list should either disappear or the item should become disabled and the currently selected language should get the (default) next to it. Or we could just dismiss the droplist. |
There was a problem hiding this comment.
The original Language Switcher pr went through and we didn't update the events in Document.js -- specifically the LanguageChanged event (which is a past-tense event name and we normally use current-tense event names)
Actually it appears that there are NO events documented for document objects for some reason. is there a reason why we aren't documenting them? Are they documented somewhere else? I couldn't find them documented anywhere.
We also should notify lint extension authors that they should update their extensions to listen to the "languageChanged" event since most of them leave cruft behind after changing the language of a javascript file to "text". We might want to change it to "languageChange" to match the rest of the events if no one is using it yet as well.
There was a problem hiding this comment.
The "languageChanged" event was added much earlier than the 0.42 language switcher PR -- it dates back to Sprint 21 (c00bfb1), so I'd rather not change it as part of this diff.
There are some events documented for Document (see docs on the constructor at the top of Document.js), but not this one. I'll add it.
|
@JeffryBooher I'm not seeing either of the behavior issues you described above:
The dropdown does close for me, and when I reopen it, it now shows "(default)" next to JavaScript instead of Text. Is there a different recipe I need to follow in order to repro the issues you saw? |
* Use .hasClass() instead of .is() where possible * More succinct math operators in DropdownEventHandler._tryToSelect() * Document language-change events * Improve some more JS code hints docs
|
@JeffryBooher Changes pushed. Thanks for review! |
|
@peterflynn It's probable that these are introduced by CEF 1750 and we should investigate them. |
|
@peterflynn I went back to CEF 1547 and the problem still reproduces so it isn't 1750 specific. Download and open the following project:
|
There was a problem hiding this comment.
This is why I can't get this to work for me. You need to handle undefined as a return value from PreferenecesManager.get()
Uncaught TypeError: Cannot set property 'jst' of undefined EditorStatusBar.js:385There was a problem hiding this comment.
Yikes, good catch indeed,
@dangoor The docs for LanguageManager.definePreference() make it appear as if the initial value arg is required, so is the bug in this case that LanguageManager didn't set the default for "language.fileExtensions" to {}? (I found only a couple more cases throughout the codebase where a default isn't explicitly specified).
There was a problem hiding this comment.
You're right. What LanguageManager does is less than ideal because _updateFromPrefs does:
var newMapping = PreferencesManager.get(pref) || {},rather than just having a default set via definePreference.
Follow-on to PR #6409...
It may be easiest to review each commit individually, since they're fairly distinct:
Second commit - new feature:
First commit - cleanups:
Document.setLanguageOverride()"currentDocumentLanguageChanged"event; remove unneeded extra 'if' testsThird commit:
For clarity, I'd ideally like the "Set as Default" menu item to be grayed out when there is no path-specific override on the current file (i.e., when the current language already is the default for the current filetype)... but disabled items aren't a think in DropdownButton yet and I will need to do some cleanup there to get it working -- so I wanted to post this initial for review first.(this is now implemented)