question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Predictive IntelliSense

See original GitHub issue

Reference issue: RFC#687

Predictive IntelliSense is an addition to the interactive experience to assist in command discovery and accelerate full command execution. This enables new and experienced users of PowerShell to discover, edit, and execute full commands based on matching predictions from the users history or additional provider.

pi-static

Tab Completion has accelerated the success of both new and experienced PowerShell users. New users get the benefit of discovery; seeing available cmdlets and parameters as options while interactively typing. Experienced users receive the benefit of acceleration; typing less while using the <tab> key to quickly complete a command.

The increasing amount of technology translates to an increase in cmdlets and full command complexity. Predictive IntelliSense is an addition to the concept of Tab Completion; helping the user discover, build and edit full commands based on the users history or additional plugins.

The proposal is to add Predictive IntelliSense and enhancements for MenuComplete/Dynamic Help to the users interactive experience.

Predictive IntelliSense Protoype maybe found on PSGallery.

Proposed technical implementation details

  1. Predictive IntelliSense displays a best match command completion from command history. The prediction may change if a better match is found as the user types additional information. The predicted command may be accepted, edited, or ignored. It may be possible to support additional predictive providers.
pi-static
  1. Predictions are searchable and may be edited. Additional key bindings may be added to the users Profile as in the example below:
Set-PSReadLineKeyHandler -Key "Ctrl+d" -Function MenuComplete
Set-PSReadLineKeyHandler -Key "Ctrl+f" -Function ForwardWord
Set-PSReadLineKeyHandler -Key "Ctrl+b" -Function BackwardWord
Set-PSReadLineKeyHandler -Key "Ctrl+z" -Function Undo
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward
  1. Predictions are searchable based on the current cursor position.
  • Searching history from cmdlet verb.

pi-arrow-verb

  • Searching histroy from cmdlet noun.

pi-arrow-Noun

  • Searching history from parameter.

pi-arrow-param

  1. Predictions may be edited by stepping-through the parameters and arguments.
  • Moving forward and backward using additional key bindings.

pi-fb

  • Note: Changing the parameter/argument, changes the prediction.

pi-fb-arg

  1. MenuComplete/Dynamic Help is a current feature of PSReadLine. When combined with Predictive IntelliSense, MenuComplete provides additonal discovery and help information.
  • MenuComplete providing cmdlet discovery and help.

mc-noun2

  • MenuComplete providing parameter discovery and help.

mc-param

Open discussion items:

  • Should the number of lines displayed for MenuComplete be restricted and what should that restriction be?
  • Should an interactive cursor-based scroll bar for paging be included?
  • What should the content of Dynamic Help include?
mc-realestate
  1. Full cmdlet help is accessible using a key binding to access the help in a virtual terminal. An additional key binding will return the user from the virtual terminal to the previous screen.
dh-f1
  1. Predictive IntelliSense Accessibility is managed through the users profile.
pi-color pi-color2
Set-PSReadLineOption -Colors @{ Prediction = '#8A0303'}
Set-PSReadLineOption -Colors @{ Prediction = '#2F7004'}

pi-color2-fb

Multiple color code values are supported currently in PSReadLine.

Examples of different color code values:

Set-PSReadLineOption -Colors @{ Prediction = 'DarkRed'}
 # Use a ConsoleColor enum
Set-PSReadLineOption -Colors @{ Prediction = [ConsoleColor]::DarkRed}
 # 24 bit color escape sequence
Set-PSReadLineOption -Colors @{ Prediction = "$([char]0x1b)[38;5;100m"}
 # RGB value
Set-PSReadLineOption -Colors @{ Prediction = "#8181f7"}
  1. Predictive IntelliSense Extensibility

It may be possible to support 1st party and 3rd party predictive plugins.

Issue Analytics

  • State:closed
  • Created 3 years ago
  • Reactions:46
  • Comments:15 (3 by maintainers)

github_iconTop GitHub Comments

13reactions
TylerLeonhardtcommented, Apr 14, 2020

One other thing about the Dynamic Help feature… the PowerShell extension has been providing this experience for a while (see the box on the right):

image

It’s called the completionItem/resolve request as a part of the language server protocol.

The idea here is… for a completion, give me more details about it… but only send the request for more details when it is highlighted.

However, the PowerShell extension goes a step further to provide syntax as you’re typing parameters too:

image

VS Code decided it was a good idea to separate this into it’s own request called the Signature Help Request.

There are a lot of learning from the PowerShell extension and LSP that can be leveraged in the design of the features outlined here. Please consider them in the design.

8reactions
rdharcommented, Dec 29, 2020

Looking at #687, it looks like some progress has been made with the following:

# Search auto-completion from history
Set-PSReadLineOption -HistorySearchCursorMovesToEnd
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward

# Show auto-complete predictions from history
Set-PSReadLineOption -ShowToolTips
Set-PSReadLineOption -PredictionSource history
Get-PSReadLineOption | ForEach-Object predictionsource

That said, still nowhere near as feature-rich as PowerShell’s VS Code extension.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Announcing PSReadLine 2.1+ with Predictive IntelliSense
Predictive IntelliSense is an addition to the concept of tab completion that assists the user in successfully completing commands.
Read more >
PSReadLine 2.2.6 enables Predictive Intellisense by default
PSReadLine first introduced Predictive IntelliSense using History based suggestions as a customer enabled feature in November 2020.
Read more >
Adding Predictive IntelliSense to my Windows Terminal ...
Adding Predictive IntelliSense to my Windows Terminal PowerShell Prompt ... prompt history to make predictions on what you want to see next.
Read more >
Enable Predictive IntelliSense in PowerShell
Predictive IntelliSense is a feature of PSReadline and available in PowerShell 7.2. The feature takes advantage of the PSReadline history to ...
Read more >
Using Predictive IntelliSense in PowerShell
Predictive IntelliSense is a new feature in PSReadline 2.1 and is available by default in PowerShell 7.2. When typing a command in the ......
Read more >

github_iconTop Related Medium Post

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found