* completion-context: Add CompletionContextParser placeholder
Implements the xonsh (tab-)completion context parser.
This parser is meant to parse a (possibly incomplete) command line.
* completers: tools: Implement ``contextual_completer`` decorator
This is used to mark completers that want to use the parsed completion context.
* completers: Enable using contextual completers in xonsh/completer.py
* completers: readline, ptk, jupyter: Enable using contextual completers
Pass ``multiline_text`` and ``cursor_index`` to ``Completer.complete()``
* parsers: base: Refactor out a ``raise_parse_error`` function
* tokenize: Enable ``tolerant`` mode
If ``tolerant`` is True, yield ERRORTOKEN instead of
throwing an exception when encountering an error.
* lexer: Enable ``tolerant`` mode
Tokenize without extra checks (e.g. paren matching).
When True, ERRORTOKEN contains the erroneous string instead of an error msg.
* tests: lexer: Test ``tolerant`` mode
* completion-context: Implement simple CommandContext parsing
* completion-context: tests: Test simple CommandContext parsing
* completion-context: Implement parsing sub-commands
* completion-context: tests: Test parsing sub-commands
* completion-context: Add news file
* completion-context: parser: Add parser table path to relevant locations
Code-coverage, mypy ignore list, etc.
* completion-context: Implement parsing partial strings and line continuations
* completion-context: tests: Test parsing partial strings and line continuations
* completion-context: Convert ``Span`` object to a ``slice``
* completion-context: Refactor out ``create_command`` and ``cursor_in_span``
* completion-context: Implement handling empty commands
* completion-context: tests: Test handling empty commands
* completion-context: Implement handling multiple commands
Separated by newlines, `;`, `and`, `or`, `|`, `&&`, `||`
* completion-context: tests: Test handling multiple commands
Separated by newlines, `;`, `and`, `or`, `|`, `&&`, `||`
* completion-context: Implement handling python context
* completion-context: tests: Test handling python context
* completers: tools: Add `contextual_command_completer`
* completers: Make `complete_skipper` contextual
* completers: Make `complete_from_man` contextual
* completers: Make `complete_from_bash` contextual and add test
* completers: Make `complete_pip` contextual and update tests
* completers: Keep opening string quote if it exists
* completion-context: Handle cursor after a closing quote
For example - cursor at the end of ``ls "/usr/"``.
1. The closing quote will be appended to all completions.
I.e the completion ``/usr/bin`` will turn into ``/usr/bin"``
2. If not specified, lprefix will cover the closing prefix.
I.e for ``ls "/usr/"``, the default lprefix will be 6 to include the closing quote.
* completion-context: tests: Test handling cursor after a closing quote
* completion-context: Fix bug with multiple empty commands
e.g. `;;;`
* completion-context: tests: Speed up tests
From ~15 seconds to ~500 ms
* completion-context: Expand commands and subcommands
* completion-context: Simplify `commands` rules
* completion-context: Simplify `sub_expression` rules
* completion-context: Simplify editing a multi-command token
* completion-context: Inline `create_command`
* completion-context: Implement `contextual_command_completer_for` helper
* completers: Make `complete_cd`/`complete_rmdir` contextual and add tests
* completers: path: Don't append a double-backslash in a raw string
When completing a path, if a raw string is used (e.g. `r"C:\Windows\"`),
there's no reason to append a double-backslash (e.g. `r"C:\Windows\\"`).
* completers: Make `complete_xonfig`/`complete_xontrib` contextual and add tests
* completers: Make `complete_completer` contextual and add tests
* completers: Make `complete_import` contextual and add tests
* completion-context: Add python `ctx` attribute
* completion: tools: Simplify `RichCompletion` attributes handling
* completers: Make `base`, `python`, and `commands` contextual
* Add tests
* No need for `python_mode` completer anymore
* completion: tools: Add `append_space` attribute to `RichCompletion`
* completion-context: Get all lines in a main python context
* xontrib: jedi: Make the `jedi` completer contextual
* completers: tools: Remove `get_ptk_completer` and `PromptToolkitCompleter.current_document`
These aren't needed anymore now that contextual completers can access the multiline code (via `PythonContext.multiline_code`).
* completion-context: ptk: Expand aliases
* completion-context: jupyter: Expand aliases and fix line handling
* completer: Preserve custom prefix after closing quote
* completers: bash: Ensure bash completion uses the complete prefix
* completers: pip: Append a space after a pip command
* completers: pip: Prevent bad package name completions
* completers: Remove a common prefix from `RichCompletion` if `display` wasn't provided
* completion-context: Treat cursor at edge of `&& || | ;` as normal args
This will be used for completing a space
* completers: Complete end proc keywords correctly
* Fix garbage collection of JSON history specified in seconds.
* Add news entry.
* Avoid possible off-by-one error
* Make size_over return value easier to reason about.
* Update gc_seconds test cases.
Co-authored-by: bhawkins <bhawkins@github.com>
* xoreutils: which: Make `which` command aware of ExecAlias
* aliases: exec-alias: Remove unneeded newline at end of src
It isn't needed for the exec to work
* news: Improve `which` output for ExecAlias
* update imphooks encoding regex to match the newer version at PEP 263
* fix: add proper backslash-escaping to the imphooks encoding regex
Co-authored-by: Gil Forsyth <gforsyth@users.noreply.github.com>
Co-authored-by: Gil Forsyth <gforsyth@users.noreply.github.com>
* Added ability to set XONSH_HISTORY_FILE before loading the history backend.
* black
* using XONSH_HISTORY_FILE
* tests
* black
* Convert WindowsPath to str
* Update xonsh/environ.py
Co-authored-by: Gil Forsyth <gforsyth@users.noreply.github.com>
* cleaning
* test sqlite
* test dummy
* typo
* fix 3.6
Co-authored-by: a <a>
Co-authored-by: Gil Forsyth <gforsyth@users.noreply.github.com>
* XONSH_HISTORY_FILE
* bump tests
* docs
* type
* black
* bump tests
* bump tests
* black
* I will forever update black before black
Co-authored-by: a <a>
* Perform path completion filtering based on expanded path
This fixes issues with the cd and rmdir completers not working
correctly due to os.path.isdir returning false for paths like
'~/example'.
* Avoid running subsequent completers for cd/rmdir
Raise StopIteration in the cd and rmdir completers if nothing is
found. This prevents the later completers like the generic 'path'
completer from running and returning incorrect results.
* fix: handle ast.Index and ast.ExtSlice change while Parsing
related to #4100, #4099, #4068, #4038, #4028, #4005,
* fix: py39 raises when lineno & col not given
TypeError: required field "col_offset" missing from keyword
* fix: tuple inside scbscriptor support for py39
* chore: enable py39 ci checks
they were silently failing before
* test: a backlog test for attributes inside subscriptors
this would require debugging deep into the ply parser methods.
* docs: add news item
* test: skip test_rc_with_modified_path on windows
* Update tests/test_parser.py
Co-authored-by: Gil Forsyth <gforsyth@users.noreply.github.com>
* test: mark failing tests for py39 parser
Co-authored-by: Gil Forsyth <gforsyth@users.noreply.github.com>
* add "disown" internal command
This command will remove jobs from the shell's job table, allowing the command
to continue running after the shell exits. Configuration options are provided
to manage how suspended background jobs are handled after being disowned.
* job-ctrl-disown code style update
* job-ctrl-disown style updates + change arg --cont to --continue
* Trim extra "=" in doc for "disown" cmd
Co-authored-by: Gil Forsyth <gforsyth@users.noreply.github.com>
Co-authored-by: Gil Forsyth <gforsyth@users.noreply.github.com>
* Add $HISTCONTROL=ignorespace support
* Add news and fix formatting
* Move ignore space to happend in append and fix test bugs
* invert conditional
* remove leftover debug info
* Fix libc detection on FreeBSD
On FreeBSD /usr/lib/libc.so is an LDScript text file, ctypes.CDLL can't handle
those. So we hardcode the current version number, lest we'd need to use the less
efficient ctypes.util.find_library function. This should be alright, since the
last increase in libc version number on FreeBSD was over 10 years ago.
* sysctlbyname needs bytes, not unicode strs
* Add news item for FreeBSD libc fix
* aliases: Add merging operation to the aliases dict
* tests: Add tests to the aliases merging operation
* news: Add summary about the Alias merging functionality