mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
Reenable tab-completion of global variable names in meteor shell.
Summary: Before this commit you could type `Meteor.is` in a `meteor shell` session and then tab to see a list of possible completions (e.g. `Meteor.isClient`, `Meteor.isServer`), but typing a prefix of a global variable name like `Mete` followed by tab has been broken ever since we stopped using the global object as the REPL context: https://github.com/meteor/meteor/commit/7c7e52f2d2 The reason for that commit was to prevent the REPL from overwriting the global `_` variable (which most Meteor developers expect to be bound to `require("underscore")`): https://github.com/meteor/meteor/3227 This commit solves #3227 by making `repl.context._` a read-only property that is permanently "bound" to underscore. As a bonus, we now intercept assignments to `_` and store those values as `repl.context.__`, so you still have access to the last result in the shell via `__`. Test Plan: Run `meteor shell`, evaluate a few expressions, and see that (1) global variables can be tab-completed, (2) `_` remains bound to underscore, and (3) `__` gets bound to the result of the evaluated expressions. Reviewers: avital, stubailo, glasser Reviewed By: glasser Differential Revision: https://phabricator.meteor.io/D12
This commit is contained in:
@@ -56,7 +56,7 @@ function onConnection(socket) {
|
||||
prompt: "> ",
|
||||
terminal: true,
|
||||
useColors: true,
|
||||
useGlobal: false,
|
||||
useGlobal: true,
|
||||
ignoreUndefined: true,
|
||||
});
|
||||
|
||||
@@ -77,6 +77,19 @@ function startREPL(options) {
|
||||
// History persists across shell sessions!
|
||||
initializeHistory(repl);
|
||||
|
||||
Object.defineProperty(repl.context, "_", {
|
||||
// Force the global _ variable to remain bound to underscore.
|
||||
get: function () { return _; },
|
||||
|
||||
// Expose the last REPL result as __ instead of _.
|
||||
set: function(lastResult) {
|
||||
repl.context.__ = lastResult;
|
||||
},
|
||||
|
||||
enumerable: true,
|
||||
configurable: false
|
||||
});
|
||||
|
||||
// Use the same `require` function and `module` object visible to the
|
||||
// shell.js module.
|
||||
repl.context.require = require;
|
||||
|
||||
Reference in New Issue
Block a user