Skip to content

Commit e7b982e

Browse files
committed
fix too aggressive overrides of IPython's pinfo (?) and pinfo2 (??)
1 parent aac6d21 commit e7b982e

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
## CHANGELOG
22

3+
### `@krassowski/jupyterlab-lsp 2.0.5` (2020-09-11)
4+
5+
- bug fixes
6+
7+
- fix too aggressive overrides of IPython's pinfo (`?`) and pinfo2 (`??`) ([#352])
8+
9+
[#352]: https://github.com/krassowski/jupyterlab-lsp/issues/352
10+
311
### `@krassowski/jupyterlab-lsp 2.0.4` (2020-09-11)
412

513
- bug fixes

packages/jupyterlab-lsp/src/transclusions/ipython/overrides.spec.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,5 +206,19 @@ describe('Default IPython overrides', () => {
206206
reverse = line_magics_map.reverse.override_for(override);
207207
expect(reverse).to.equal('int??');
208208
});
209+
210+
it('does not override standalone question marks', () => {
211+
let override = line_magics_map.override_for("'q?'");
212+
expect(override).to.equal(null);
213+
214+
override = line_magics_map.override_for('#?');
215+
expect(override).to.equal(null);
216+
217+
override = line_magics_map.override_for("?q'");
218+
expect(override).to.equal(null);
219+
220+
override = line_magics_map.override_for("?#'");
221+
expect(override).to.equal(null);
222+
});
209223
});
210224
});

packages/jupyterlab-lsp/src/transclusions/ipython/overrides.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ function empty_or_escaped(x: string) {
4242
*/
4343
export const LINE_MAGIC_PREFIX = '^(\\s*|\\s*\\S+\\s*=\\s*)';
4444

45+
export const PYTHON_IDENTIFIER = '([^?s\'"\\(\\)-\\+\\/#]+)';
46+
4547
export let overrides: IScopedCodeOverride[] = [
4648
/**
4749
* Line magics
@@ -60,7 +62,10 @@ export let overrides: IScopedCodeOverride[] = [
6062
},
6163
{
6264
// note: assignments of pinfo/pinfo2 are not supported by IPython
63-
pattern: '^(\\s*)' + '(\\?{1,2})(\\S+)(\n)?',
65+
// and only "simple" identifiers are supported, i.e.
66+
// ?x['a']
67+
// would not be solved, leading to "Object `x['a']` not found."
68+
pattern: '^(\\s*)' + '(\\?{1,2})' + PYTHON_IDENTIFIER + '(\n)?$',
6469
replacement: (match, prefix, marks, name, line_break) => {
6570
const cmd = marks == '?' ? 'pinfo' : 'pinfo2';
6671
line_break = line_break || '';
@@ -79,7 +84,7 @@ export let overrides: IScopedCodeOverride[] = [
7984
}
8085
},
8186
{
82-
pattern: '^(\\s*)' + '([^\\?\\s]+)(\\?{1,2})(\n)?',
87+
pattern: '^(\\s*)' + PYTHON_IDENTIFIER + '(\\?{1,2})(\n)?',
8388
replacement: (match, prefix, name, marks, line_break) => {
8489
const cmd = marks == '?' ? 'pinfo' : 'pinfo2';
8590
line_break = line_break || '';

0 commit comments

Comments
 (0)