Browse Source

repl: allow autocompletion for scoped packages

Previously, autocompletion of scoped packages was not supported by the
repl due to not including the `@` character in the regular expression.

PR-URL: https://github.com/nodejs/node/pull/10296
Reviewed-By: Prince John Wesley <princejohnwesley@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
v6
Evan Lucas 8 years ago
committed by James M Snell
parent
commit
e248f7f9e7
  1. 2
      lib/repl.js
  2. 1
      test/fixtures/node_modules/@nodejsscope/index.js
  3. 21
      test/parallel/test-repl-tab-complete.js

2
lib/repl.js

@ -787,7 +787,7 @@ ArrayStream.prototype.writable = true;
ArrayStream.prototype.resume = function() {};
ArrayStream.prototype.write = function() {};
const requireRE = /\brequire\s*\(['"](([\w./-]+\/)?([\w./-]*))/;
const requireRE = /\brequire\s*\(['"](([\w@./-]+\/)?([\w@./-]*))/;
const simpleExpressionRE =
/(([a-zA-Z_$](?:\w|\$)*)\.)*([a-zA-Z_$](?:\w|\$)*)\.?$/;

1
test/fixtures/node_modules/@nodejsscope/index.js

@ -0,0 +1 @@
// Not used

21
test/parallel/test-repl-tab-complete.js

@ -1,8 +1,14 @@
'use strict';
var common = require('../common');
var assert = require('assert');
var repl = require('repl');
const common = require('../common');
const assert = require('assert');
// We have to change the directory to ../fixtures before requiring repl
// in order to make the tests for completion of node_modules work properly
// since repl modifies module.paths.
process.chdir(common.fixturesDir);
const repl = require('repl');
function getNoResultsFunction() {
return common.mustCall((err, data) => {
@ -196,6 +202,15 @@ testMe.complete('require(\'n', common.mustCall(function(error, data) {
});
}));
{
const expected = ['@nodejsscope', '@nodejsscope/'];
putIn.run(['.clear']);
testMe.complete('require(\'@nodejs', common.mustCall((err, data) => {
assert.strictEqual(err, null);
assert.deepStrictEqual(data, [expected, '@nodejs']);
}));
}
// Make sure tab completion works on context properties
putIn.run(['.clear']);

Loading…
Cancel
Save