initial
Some checks are pending
CI Tests / dotnet (push) Waiting to run
CI Tests / dotnet-1 (push) Waiting to run
CI Tests / dotnet-2 (push) Waiting to run
Emacs End-to-End Tests / ert (push) Waiting to run
Vim End-to-End Tests / themis (push) Waiting to run

This commit is contained in:
fwastring 2026-02-17 13:06:31 +01:00
commit baa0056244
352 changed files with 47928 additions and 0 deletions

28
docs/api/index.md Normal file
View file

@ -0,0 +1,28 @@
# API Reference
The .NET API for PowerShell Editor Services is organized in a way that allows
you to easily get started using all of its services but also giving you the
option to only use the services you care about in your application.
The best starting point is the @Microsoft.PowerShell.EditorServices.EditorSession
class which can start up all of the following services for use in a single editing
session.
Use the @Microsoft.PowerShell.EditorServices.LanguageService to provide language
intelligence behaviors like finding the references or definition of a cmdlet or variable.
Use the @Microsoft.PowerShell.EditorServices.AnalysisService to provide rule-based
analysis of scripts using [PowerShell Script Analyzer](https://github.com/PowerShell/PSScriptAnalyzer).
Use the @Microsoft.PowerShell.EditorServices.DebugService to easily interact with
the PowerShell debugger.
Use the @Microsoft.PowerShell.EditorServices.Console.ConsoleService to provide interactive
console support in the user's editor.
Use the @Microsoft.PowerShell.EditorServices.Services.ExtensionService to allow
the user to extend the host editor with new capabilities using PowerShell code.
The core of all the services is the @Microsoft.PowerShell.EditorServices.PowerShellContext
class. This class manages a session's runspace and handles script and command
execution no matter what state the runspace is in.

69
docs/docfx.json Normal file
View file

@ -0,0 +1,69 @@
{
"metadata": [
{
"src": [
{
"files": [ "*.csproj" ],
"cwd": "../src/PowerShellEditorServices",
"exclude": [ "**/obj/**", "**/bin/**" ]
}
],
"dest": "metadata/api"
}
],
"build": {
"content": [
{
"cwd": "metadata/api",
"files": [
"**/**.yml"
],
"dest": "api"
},
{
"cwd": "../",
"files": [
"CONTRIBUTING.md",
"CHANGELOG.md"
]
},
{
"cwd": ".",
"files": [
"toc.yml",
"index.md",
"api/index.md",
"guide/**.md"
],
"exclude": [
"metadata/**",
"_site/**"
]
}
],
"resource": [
{
"files": [
"images/**"
],
"exclude": [
"obj/**",
"_site/**"
]
}
],
"overwrite": [
{
"files": [
"apidoc/**.md"
],
"exclude": [
"obj/**",
"_site/**"
]
}
],
"dest": "_site",
"template": [ "default", "template" ]
}
}

168
docs/guide/extensions.md Normal file
View file

@ -0,0 +1,168 @@
# Extending the Host Editor
PowerShell Editor Services exposes a common extensibility model which allows
you to write extension code in PowerShell that works across any editor that
uses PowerShell Editor Services.
## API Overview
### Introducing `$psEditor`
The entry point for the PowerShell Editor Services extensibility model is the `$psEditor`
object of the type @Microsoft.PowerShell.EditorServices.Services.PowerShellContext.EditorObject. For
those familiar with the PowerShell ISE's `$psISE` object, the `$psEditor` object is very
similar. The primary difference is that this model has been generalized to work against
any editor which leverages PowerShell Editor Services for its PowerShell editing experience.
> NOTE: For now the `$psEditor` object is limited as it has just been
> introduced. If you have ideas for other useful APIs it could expose
> please file an issue on our GitHub page.
This object gives access to all of the high-level services in the current
editing session. For example, the @Microsoft.PowerShell.EditorServices.Services.PowerShellContext.EditorObject.Workspace
property gives access to the editor's workspace, allowing you to create or open files
in the editor.
### Usage Examples
#### Opening a file in the editor
```powershell
# Open the current user's profile for this editor
$psEditor.Workspace.OpenFile($profile)
```
#### Manipulating the user's active file buffer
```powershell
# Insert new text replacing the user's current selection
$context = $psEditor.GetEditorContext()
$context.CurrentFile.InsertText("# All your script are belong to us", $context.SelectedRange)
```
#### Setting the selection based on the cursor position
```powershell
# Set the selection from their cursor position to the end of the same line
$context = $psEditor.GetEditorContext()
$context.SetSelection($context.CursorPosition, $context.CursorPosition.GetLineEnd())
```
## Registering Editor Commands
The `$psEditor` object gives you the ability to write a script that can automate the
host editor when run inside of it. However, you may not want to give a user a plain
script that performs some operation. What if you'd prefer to add a new command to the
editor which can execute your code when the user invokes it? The `Register-EditorCommand`
cmdlet allows you to register either a function, cmdlet, or ScriptBlock as a
command in the host editor.
### Registering a cmdlet or function command
```powershell
function Invoke-MyCommand {
Write-Output "My command's function was invoked!"
}
Register-EditorCommand `
-Name "MyModule.MyCommandWithFunction" `
-DisplayName "My command with function" `
-Function Invoke-MyCommand
```
### Registering a script block command
```powershell
Register-EditorCommand `
-Name "MyModule.MyCommandWithScriptBlock" `
-DisplayName "My command with script block" `
-ScriptBlock { Write-Output "My command's script block was invoked!" }
```
### The @Microsoft.PowerShell.EditorServices.Services.PowerShellContext.EditorContext parameter
Your function, cmdlet, or ScriptBlock can optionally accept a single parameter
of type @Microsoft.PowerShell.EditorServices.Services.PowerShellContext.EditorContext which provides
information about the state of the host editor at the time your command was
invoked. With this object you can easily perform operations like manipulatin the
state of the user's active editor buffer or changing the current selection.
The usual convention is that a `$context` parameter is added to your editor
command's function. For now it is recommended that you fully specify the
type of the @Microsoft.PowerShell.EditorServices.Services.PowerShellContext.EditorContext object
so that you get full IntelliSense on your context parameter.
Here is an example of using the `$context` parameter:
```powershell
Register-EditorCommand `
-Name "MyModule.MyEditorCommandWithContext" `
-DisplayName "My command with context usage" `
-ScriptBlock {
param([Microsoft.PowerShell.EditorServices.Services.PowerShellContext.EditorContext]$context)
Write-Output "The user's cursor is on line $($context.CursorPosition.Line)!"
}
```
### Suppressing command output
If you would like for your editor command to run without its output being
written to the user's console, you can use the `-SuppressOutput` switch
parameter of the `Register-EditorCommand` cmdlet. We recommend that you
use this parameter if your command does not need to write output to the
user's console.
Regardless of whether the `-SuppressOutput` parameter is used, any errors
that occur while running your editor command will be written to the user's
console.
## Using Editor Commands
If you've registered an editor command, either through your own code or
a module that you've installed, you can launch it using your editor's **Show
additional commands from PowerShell modules** command. Running this command
will cause a list of commands to be displayed.
In Visual Studio Code, press `Ctrl+Shift+P` to open the command palette. Type
the characters `addi` until you see the following item and then press `Enter`:
![Command palette screenshot](../images/vsc_command_palette.png)
The list that appears next will show all of the editor commands that have
been registered with PowerShell code. Selecting one of them will cause its
function or ScriptBlock to be executed.
![Command list screenshot](../images/vsc_editor_command_list.png)
Other editors should follow a similar pattern, exposing this command list through
a "Show additional commands" item in the command palette.
> NOTE: In the future we hope to be able to register editor commands at the top level
> so that these commands are easier to find and so that they also can be bound to
> hotkeys for quick access.
## Shipping an Extension Module
You can easily ship a module containing editor commands which get registered
if the module is loaded into an editor session. Assuming that you've exported
a function or cmdlet named `Invoke-MyEditorCommand` in your module's psd1
file, you can add this code at the very end of your module's psm1 file:
```powershell
if ($psEditor) {
Register-EditorCommand `
-Name "MyModule.MyEditorCommand" `
-DisplayName "My editor command" `
-Function Invoke-MyEditorCommand `
-SuppressOutput
}
```
The user will now be able to import your module in their host editor's profile and
your editor command will be immediately available after the PowerShell extension
in that editor starts up.
> NOTE: In the future we plan to provide an easy way for the user to opt-in
> to the automatic loading of any editor command modules that they've installed
> from the PowerShell Gallery. If this interests you, please let us know on
> [this GitHub issue](https://github.com/PowerShell/PowerShellEditorServices/issues/215).

View file

@ -0,0 +1,166 @@
# Getting Started
The PowerShell Editor Services project provides a Language Server Protocol (LSP)
HTTP server that runs outside the editor. The server supplies rich editor
functionality like code completion, syntax highlighting, and code annotation.
This document will guide you through getting a minimal setup working with
several editors.
## Editors
1. [Neovim](#neovim)
## Neovim
### Install the Server
Download and extract the PowerShell Editor Services server from the
[releases page](https://github.com/PowerShell/PowerShellEditorServices/releases)
into a directory of your choice. Remember the path that you extract the
project into.
```powershell
$DownloadUrl = 'https://github.com/PowerShell/PowerShellEditorServices/releases/latest/download/PowerShellEditorServices.zip';
$ZipPath = "$HOME/Desktop/PowerShellEditorServices.zip";
$InstallPath = "$HOME/Desktop/PowerShellEditorServices";
Invoke-WebRequest -Method 'GET' -Uri $DownloadUrl -OutFile $ZipPath;
Expand-Archive -Path $ZipPath -DestinationPath $InstallPath;
```
### Install Neovim's Quickstart LSP Configurations
Neovim has a repository of quickstart LSP configurations for a number of
languages, including PowerShell. Install the quickstart LSP configuration into
one of the package directories inside `$XDG_CONFIG_HOME`. The path
`$XDG_CONFIG_HOME` will vary depending on which operating system you are on:
| OS | Path |
| ---------- | -------------------------- |
| Windows | `$HOME/AppData/local/nvim` |
| *nix/macOS | `$HOME/.config/nvim` |
The easiest way is to install the quickstart configuration is to clone the
repository using git:
```powershell
git clone https://github.com/neovim/nvim-lspconfig.git "$HOME/AppData/local/nvim/pack/complete/start/nvim-lspconfig"
```
Alternatively, you can extract the zip file into the same place:
```powershell
$DownloadUrl = 'https://github.com/neovim/nvim-lspconfig/archive/refs/heads/master.zip';
$ZipPath = "$HOME/AppData/local/nvim/nvim-lspconfig.zip";
$InstallPath = "$HOME/AppData/local/nvim/pack/complete/start/nvim-lspconfig";
Invoke-WebRequest -Method 'GET' Uri $DownloadUrl -OutFile $ZipPath;
Expand-Archive -Path $ZipPath -DestinationPath $InstallPath;
```
> NOTE: If the corresponding neovim configuration and package directories have
> not been created yet, create them before installing the quickstart LSP
> configuration repository.
### Configure the Server
#### Setup Keybindings and Path Information
Once the basic language configurations have been installed, add this to your
`init.lua` located in `$XDG_CONFIG_HOME`:
```lua
local on_attach = function(client, bufnr)
-- Enable completion triggered by <c-x><c-o>
vim.api.nvim_set_option_value("omnifunc", "v:lua.vim.lsp.omnifunc", { buf = bufnr })
local bufopts = { noremap = true, silent = true, buffer = bufnr }
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts)
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts)
vim.keymap.set('n', '<Leader>ca', vim.lsp.buf.code_action, bufopts)
vim.keymap.set('n', '<Leader>f', function() vim.lsp.buf.format { async = true } end, bufopts)
vim.keymap.set('n', '<Leader>rn', vim.lsp.buf.rename, bufopts)
vim.keymap.set('n', '<Leader>td', vim.lsp.buf.type_definition, bufopts)
end
local home_directory = os.getenv('HOME')
if home_directory == nil then
home_directory = os.getenv('USERPROFILE')
end
-- The bundle_path is where PowerShell Editor Services was installed
local bundle_path = home_directory .. '/Desktop/PowerShellEditorServices'
require('lspconfig')['powershell_es'].setup {
bundle_path = bundle_path,
on_attach = on_attach
}
```
> NOTE: Be sure to set the bundle_path variable to the correct location,
> otherwise the server will not know the path to start the server.
If you use an `init.vim` file, you may put the keybinding and path configuration
in your `init.vim` with the `lua` heredoc syntax instead.
```vim
lua << EOF
-- lua keybindings and path configuration here
EOF
```
#### Theme Troubleshooting
If you find that your colorscheme appears correctly for a second and then
changes to not having full highlighting, you'll need to disable semantic
highlighting.
Add this line to the `on_attach` function.
```lua
client.server_capabilities.semanticTokensProvider = nil
```
#### Configure Additional Settings
To further configure the server, you can supply settings to the setup table.
For example, you can set the code formatting preset to one true brace style
(OTBS).
```lua
require('lspconfig')['powershell_es'].setup {
bundle_path = bundle_path,
on_attach = on_attach,
settings = { powershell = { codeFormatting = { Preset = 'OTBS' } } }
}
```
For a more complete list of options have a look at this schema:
[nvim-lsp-installer powershell_es reference](https://github.com/williamboman/nvim-lsp-installer/blob/main/lua/nvim-lsp-installer/_generated/schemas/powershell_es.lua)
You can also set the bundled PSScriptAnalyzer's custom rule path like so:
```lua
local custom_settings_path = home_directory .. '/PSScriptAnalyzerSettings.psd1'
require('lspconfig')['powershell_es'].setup {
bundle_path = bundle_path,
on_attach = on_attach,
settings = { powershell = { scriptAnalysis = { settingsPath = custom_settings_path } } }
}
```
#### Autocomplete Brackets Troubleshooting
If you're using `blink.cmp` and you're getting brackets when autocompleting
cmdlet names, you'll need to add `{ "ps1", "psm1" }` to the blocked filetypes
for both `kind_resolution` and `semantic_token_resolution` in the plugin's
config file.
[Blink.cmp completion reference](https://cmp.saghen.dev/configuration/reference#completion-accept)
### Indentation
Vim/Neovim does not contain default `:h indentexpr` for filetype `ps1`.
So you might notice indentation on newline is not behaving as expected for powershell files.
Luckily powershell has similar syntax like C, so we can use `:h cindent` to fix the indentation problem.
You can use the following snippet to either callback of an autocmd or ftplugin.
```lua
--- ./nvim/lua/ftplugin/ps1.lua
-- disable indent from powershell treesitter parser
-- because the parse isn't mature currently
-- you can ignore this step if don't use treesitter
if pcall(require, 'nvim-treesitter') then
vim.schedule(function() vim.cmd([[TSBufDisable indent]]) end)
end
vim.opt_local.cindent = true
vim.opt_local.cinoptions:append { 'J1', '(1s', '+0' } -- see :h cino-J, cino-(, cino-+
vim.opt_local.iskeyword:remove { '-' } -- OPTIONALLY consider Verb-Noun as a whole word
```

View file

@ -0,0 +1,37 @@
# Introduction
> NOTE: The user guide is currently under development and may be missing
> important information. If you feel that a particular area is missing or
> poorly explained, please feel free to file an issue at our [GitHub site](https://github.com/PowerShell/PowerShellEditorServices/issues)
PowerShell Editor Services is a tool that provides useful services to code
editors that need a great PowerShell editing experience.
## The .NET API
The .NET API provides the complete set of services which can be used in
code editors or any other type of application. The easiest way to get
started with it is to add the [Microsoft.PowerShell.EditorServices](https://www.nuget.org/packages/Microsoft.PowerShell.EditorServices/)
NuGet package to your C# project.
If you're a developer that would like to use PowerShell Editor Services in
a .NET application, read the page titled [Using the .NET API](using_the_dotnet_api.md)
to learn more.
## The Host Process
The host process provides a JSON-based API wrapper around the .NET APIs so
that editors written in non-.NET languages can make use of its capabilities.
In the future the host process will allow the use of network-based channels
to enable all of the APIs to be accessed remotely.
If you're a developer that would like to integrate PowerShell Editor Services
into your favorite editor, read the page titled [Using the Host Process](using_the_host_process.md)
to learn more.
## Writing Extensions in PowerShell
If you're using an editor that leverages PowerShell Editor Services to provide
PowerShell editing capabilities, you may be able to extend its behavior using
our PowerShell-based editor extension API. Read the page titled [Extending the
Host Editor](extensions.md) to learn more.

4
docs/guide/toc.md Normal file
View file

@ -0,0 +1,4 @@
# [Introduction](introduction.md)
# [Using the .NET API](using_the_dotnet_api.md)
# [Using the Host Process](using_the_host_process.md)
# [Extending the Host Editor](extensions.md)

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

27
docs/index.md Normal file
View file

@ -0,0 +1,27 @@
# PowerShell Editor Services
PowerShell Editor Services provides common functionality that is needed
to enable a consistent and robust PowerShell development experience
across multiple editors.
## [User Guide](guide/introduction.md)
The User Guide describes the high level design of this project and gives
guidance on how to use it.
## [API Reference](api/index.md)
The API Reference contains details about the .NET API.
## Getting Help
If you run into any issues while using PowerShell Editor Services and this documentation doesn't
answer your question, feel free to file an issue on our
[GitHub page](https://github.com/PowerShell/PowerShellEditorServices/issues) or contact the
via Twitter ([@daviwil](http://twitter.com/daviwil) and [@r_keith_hill](http://twitter.com/r_keith_hill))
## Contributing
We would love to incorporate community contributions into this project. If you would like to
contribute code, documentation, tests, or bug reports, please read our [Contribution Guide]
(../CONTRIBUTING.md) to learn more.

View file

@ -0,0 +1,55 @@
{{!Copyright (c) Microsoft Corporation. Licensed under the MIT License.}}
{{!include(/^styles/.*/)}}
{{!include(/^fonts/.*/)}}
{{!include(favicon.ico)}}
{{!include(logo.svg)}}
<!DOCTYPE html>
<!--[if IE]><![endif]-->
<html>
{{>partials/head}}
<body data-spy="scroll" data-target="#affix">
<div id="wrapper">
<header>
{{^_disableNavbar}}
{{>partials/navbar}}
{{/_disableNavbar}}
{{^_disableBreadcrumb}}
{{>partials/breadcrumb}}
{{/_disableBreadcrumb}}
</header>
<div role="main" class="container body-content">
{{^_disableToc}}
{{>partials/toc}}
<div class="article row grid-right">
{{/_disableToc}}
{{#_disableToc}}
<div class="article row grid">
{{/_disableToc}}
{{#_disableAffix}}
<div class="col-md-12">
{{/_disableAffix}}
{{^_disableAffix}}
<div class="col-md-10">
{{/_disableAffix}}
<article class="content wrap" id="_content">
{{^_disableContribution}}
{{#docurl}}
<a href="{{docurl}}" class="pull-right mobile-hide"><span class="fa fa-github"></span> Improve this Doc</a>
{{/docurl}}
{{/_disableContribution}}
{{{rawTitle}}}
{{{conceptual}}}
</article>
</div>
{{^_disableAffix}}
{{>partials/affix}}
{{/_disableAffix}}
</div>
</div>
{{^_disableFooter}}
{{>partials/footer}}
{{/_disableFooter}}
</div>
{{>partials/scripts}}
</body>
</html>

View file

@ -0,0 +1,135 @@
{{!Copyright (c) Microsoft Corporation. Licensed under the MIT License.}}
{{^_disableContribution}}
{{#docurl}}<a href="{{docurl}}" class="pull-right mobile-hide"><span class="fa fa-github"></span>{{__global.improveThisDoc}}</a>{{/docurl}}
{{#sourceurl}}<a href="{{sourceurl}}" class="pull-right mobile-hide">{{__global.viewSource}}</a>{{/sourceurl}}
{{/_disableContribution}}
<h1 id="{{id}}" data-uid="{{uid}}">{{>partials/title}}</h1>
<div class="markdown level0 summary">{{{summary}}}</div>
<div class="markdown level0 conceptual">{{{conceptual}}}</div>
{{#inheritance.0}}
<div class="inheritance">
<h5>{{__global.inheritance}}</h5>
{{#inheritance}}
<div class="level{{index}}">{{{specName.0.value}}}</div>
{{/inheritance}}
<div class="level{{item.level}}"><span class="xref">{{item.name.0.value}}</span></div>
</div>
{{/inheritance.0}}
<h6><strong>{{__global.namespace}}</strong>:{{namespace}}</h6>
<h6><strong>{{__global.assembly}}</strong>:{{assemblies.0}}.dll</h6>
<h5 id="{{id}}_syntax">{{__global.syntax}}</h5>
<div class="codewrapper">
<pre><code class="lang-{{_lang}} hljs">{{syntax.content.0.value}}</code></pre>
</div>
{{#remarks}}
<h5 id="{{id}}_remarks"><strong>{{__global.remarks}}</strong></h5>
<div class="markdown level0 remarks">{{{remarks}}}</div>
{{/remarks}}
{{#children}}
<h3 id="{{id}}">{{>partials/classSubtitle}}</h3>
{{#children}}
{{^_disableContribution}}
{{#docurl}}
<span class="small pull-right mobile-hide">
<span class="divider">|</span>
<a href="{{docurl}}">{{__global.improveThisDoc}}</a>
</span>{{/docurl}}
{{#sourceurl}}
<span class="small pull-right mobile-hide">
<a href="{{sourceurl}}">{{__global.viewSource}}</a>
</span>{{/sourceurl}}
{{/_disableContribution}}
<h4 id="{{id}}" data-uid="{{uid}}">{{name.0.value}}</h4>
<div class="markdown level1 summary">{{{summary}}}</div>
<div class="markdown level1 conceptual">{{{conceptual}}}</div>
{{#remarks}}
<h5 id="{{id}}_remarks">{{__global.remarks}}</h5>
<div class="markdown level1 remarks">{{{remarks}}}</div>
{{/remarks}}
<h5 class="decalaration">{{__global.declaration}}</h5>
{{#syntax}}
<div class="codewrapper">
<pre><code class="lang-{{_lang}} hljs">{{syntax.content.0.value}}</code></pre>
</div>
{{#parameters.0}}
<h5 class="parameters">{{__global.parameters}}</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{{__global.type}}</th>
<th>{{__global.name}}</th>
<th>{{__global.description}}</th>
</tr>
</thead>
<tbody>
{{/parameters.0}}
{{#parameters}}
<tr>
<td>{{{type.specName.0.value}}}</td>
<td><em>{{{id}}}</em></td>
<td>{{{description}}}</td>
</tr>
{{/parameters}}
{{#parameters.0}}
</tbody>
</table>
{{/parameters.0}}
{{#return}}
<h5 class="returns">{{__global.returns}}</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{{__global.type}}</th>
<th>{{__global.description}}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{{type.specName.0.value}}}</td>
<td>{{{description}}}</td>
</tr>
</tbody>
</table>
{{/return}}
{{#propertyValue}}
<h5 class="propertyValue">{{__global.provertyValue}}</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{{__global.type}}</th>
<th>{{__global.description}}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{{type.specName.0.value}}}</td>
<td>{{{description}}}</td>
</tr>
</tbody>
</table>
{{/propertyValue}}
{{/syntax}}
{{#exceptions.0}}
<h5 class="exceptions">{{__global.exceptions}}</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{{__global.type}}</th>
<th>{{__global.condition}}</th>
</tr>
</thead>
<tbody>
{{/exceptions.0}}
{{#exceptions}}
<tr>
<td>{{{type.specName.0.value}}}</td>
<td>{{{description}}}</td>
</tr>
{{/exceptions}}
{{#exceptions.0}}
</tbody>
</table>
{{/exceptions.0}}
{{/children}}
{{/children}}

View file

@ -0,0 +1,7 @@
{{!Copyright (c) Microsoft Corporation. Licensed under the MIT License.}}
<footer>
<div class="inner-footer">
<p>© Microsoft &nbsp;//&nbsp; Generated with <a href="https://github.com/dotnet/docfx">DocFX</a></p>
</div>
</footer>

View file

@ -0,0 +1,28 @@
{{!Copyright (c) Microsoft Corporation. Licensed under the MIT License.}}
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>{{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}}</title>
<meta name="viewport" content="width=device-width">
<meta name="title" content="{{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}}">
{{#_description}}<meta name="description" content="{{_description}}">{{/_description}}
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
<link rel="stylesheet" href="{{_rel}}styles/docfx.vendor.css">
<link rel="stylesheet" href="{{_rel}}styles/main.css">
<link rel="stylesheet" href="{{_rel}}styles/docfx.css">
<link rel="stylesheet" href="{{_rel}}styles/style.css">
<meta property="docfx:navrel" content="{{_navRel}}">
<meta property="docfx:tocrel" content="{{_tocRel}}">
<!--
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-63735192-1', 'auto');
ga('send', 'pageview');
</script>
-->
</head>

View file

@ -0,0 +1,21 @@
{{!Copyright (c) Microsoft Corporation. Licensed under the MIT License.}}
{{^_disableContribution}}
{{#docurl}}
<a href="{{docurl}}" class="pull-right mobile-hide"><span class="fa fa-github"></span>{{__global.improveThisDoc}}</a>
{{/docurl}}
{{#sourceurl}}
<a href="{{sourceurl}}" class="pull-right mobile-hide">{{__global.viewSource}}</a>
{{/sourceurl}}
{{/_disableContribution}}
<h1 id="{{id}}" data-uid="{{uid}}">{{>partials/title}}</h1>
<div class="markdown level0 summary">{{{summary}}}</div>
<div class="markdown level0 conceptual">{{{conceptual}}}</div>
<div class="markdown level0 remarks">{{{remarks}}}</div>
{{#children}}
<h3 id="{{id}}">{{>partials/namespaceSubtitle}}</h3>
{{#children}}
<h4>{{{specName.0.value}}}</h4>
<section>{{{summary}}}</section>
{{/children}}
{{/children}}

View file

@ -0,0 +1,18 @@
{{!Copyright (c) Microsoft Corporation. Licensed under the MIT License.}}
<nav class="navbar navbar-inverse">
<div class="container">
<a href="{{_rel}}"><img height="50px" src="{{_rel}}images/PowerShell_logo.png" style="float:right;"/></a>
<div class="navbar-header ">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="{{_rel}}"><span class="dotnet">PowerShell Editor Services</span></a>
</div>
<div id="navbar" class="collapse navbar-collapse">
</div><!--/.nav-collapse -->
</div>
</nav>

268
docs/template/styles/main.css vendored Normal file
View file

@ -0,0 +1,268 @@
@import url(//fonts.googleapis.com/css?family=Roboto+Condensed:700);
@import url(//fonts.googleapis.com/css?family=Open+Sans);
/* Main styles */
body {
font-family: "Open Sans", "Segoe UI", sans-serif;
font-size: 15px;
padding-top: 50px;
}
ul {
list-style-image: url("../../images/core/list-bullet.png");
}
nav {
font-size: 14px;
}
.navbar-nav > li > a.nav-active, .navbar-nav > li > a.nav-active:hover {
background-color: #333;
color: #fff;
}
h1, h2, h3, h4, h5 {
font-family: "Roboto Condensed", "Segoe UI", sans-serif;
font-weight: bold;
}
footer {
text-align: center;
width: 100%;
margin-top: 50px;
color: #c0c0c0;
}
footer > .inner-footer a {
color: #c0c0c0;
text-decoration: none;
}
footer > .inner-footer a:hover {
color: #32145a;
text-decoration: none;
}
.content a {
/*color: #A979B3;*/
color: #A356B3;
text-decoration: none;
outline: 0;
}
.content a:hover {
/*transition: color .15s cubic-bezier(.33, .66, .66, 1);*/
text-decoration: none;
color: #682079;
}
/* End of main styles */
/* Index page styles */
.btn-hero-core {
padding: 15px 25px;
background-color: #32145a;
color: #d89ae4;
display: inline-block;
font-family: "Open Sans", sans-serif;
font-size: 20px;
font-weight: bold;
margin-left: 20px;
-webkit-box-shadow: 2px 2px 3px 0px #2C0D33; /* Safari 3-4, iOS 4.0.2 - 4.2, Android 2.3+ */
-moz-box-shadow: 2px 2px 3px 0px #2C0D33; /* Firefox 3.5 - 3.6 */
box-shadow: 2px 2px 3px 0px #2C0D33; /* Opera 10.5, IE 9, Firefox 4+, Chrome 6+, iOS 5 */
}
.btn-hero-core:hover {
color: #d89ae4;
text-decoration: none;
}
.hero {
background-color: #682079;
width: inherit;
color: #fff;
}
.starter-template {
padding: 40px 15px;
text-align: center;
}
.dotnet {
color: #fff;
}
#rest-vps {
display: none;
}
.value-prop-heading {
margin-top: 0px;
}
.value-props {
margin-top: 40px;
margin-bottom: 40px;
}
.intro-image {
text-align: center;
}
.intro-image > img {
margin-top: 20px;
}
/* End of index page styles */
/* Getting started page styles */
.getting-started-intro {
text-align: center;
margin-top: 40px;
margin-bottom: 40px;
}
.getting-started-intro > h2, h4 {
margin-bottom: 30px;
}
.btn-gs {
width: 150px;
}
.btn-gs:hover, .btn-gs:active, .btn-gs:focus, .jquery-active {
color: #fff;
background-color: #682079;
outline: 0 !important;
}
.step {
width: 100%;
margin: 50px auto;
padding: 20px 0px;
text-align: center;
font-size: 16px;
border: solid 1px #c0c0c0;
min-height: 300px;
background-color: #fff;
border-radius: 10px;
}
.step-block {
display: block;
}
.step-none {
display: none;
}
.step-number {
position: relative;
top: -40px;
background-color: #32145a;
color: #fff;
font-weight: bold;
font-size: 24px;
z-index: 999;
margin-left: auto;
margin-right: auto;
width: 80px;
padding: 10px;
border: solid 1px #c0c0c0;
border-radius: 10px;
}
.step > h3 {
margin: 0;
margin-bottom: 30px;
font-size: 30px;
}
.step > p {
margin-top: 10px;
margin-bottom: 20px;
width: 70%;
text-align: center;
margin-left: auto;
margin-right: auto;
}
.code-sample {
white-space: pre;
}
/* Terminal backgrounds */
.terminal {
display: block;
width: 850px;
margin-left: auto;
margin-right: auto;
}
.terminal-titlebar {
background-color: #c0c0c0;
height: 30px;
border-top-left-radius: 5px;
border-top-right-radius: 5px;
}
.terminal-body {
background-color: #000;
color: #fff;
font-family: "Consolas", "Monaco", monospace;
font-size: 16px;
font-weight: bold;
padding: 15px;
text-align: left;
height: auto;
overflow: auto;
word-wrap: break-word;
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
}
.prompt {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
color: #c0c0c0;
}
.windows-prompt:after {
content: 'PS > ';
}
.unix-prompt:after {
content: '~$ ';
}
@media (max-device-width: 480px) and (orientation: portrait), (max-device-width: 700px) and (orientation: landscape){
/* Index page overrides */
.btn-hero-core {
padding: 10px 15px;
margin-left: 0px;
font-size: 16px;
}
.intro-image > img {
display: none;
}
/* Overview overrides */
img[src*="10kft_view"] {
width: 100%;
height: 100%;
}
/* Getting started overrides */
.btn-gs {
width: auto;
}
.btn-gs:hover, .btn-gs:active, .btn-gs:focus, .jquery-active {
width: auto;
}
.step {
width: 90%;
font-size: 14px;
}
.step > h3 {
font-size: 24px;
}
.step-number {
width: 40px;
font-size: 18px;
padding: 5px;
}
.terminal {
width: 95%;
}
.terminal-titlebar {
height: 20px;
}
.terminal-body {
font-size: 12px;
padding: 5px;
}
}

43
docs/template/styles/style.css vendored Normal file
View file

@ -0,0 +1,43 @@
body {
font-family: "Open Sans", "Segoe UI", sans-serif;
padding-top: 0px;
}
footer {
z-index: 0;
}
.navbar-brand {
font-size: 18px;
padding: 15px;
}
.toc .level3 {
font-weight: normal;
margin-top: 5px;
margin-left: 10px;
}
a.pull-right {
margin-left: 10px;
padding-top: 5px;
}
article.content > h1 {
word-break: break-word;
}
@media only screen and (max-width: 768px) {
.toc .level3 > li {
display: inline-block;
}
.toc .level3 > li:after {
margin-left: -3px;
margin-right: 5px;
content: ", ";
color: #666666;
}
}
@media (max-width: 260px) {
.toc .level3 > li {
display: block;
}
.toc .level3 > li:after {
display: none;
}
}

5
docs/toc.yml Normal file
View file

@ -0,0 +1,5 @@
- name: User Guide
href: guide/
homepage: guide/introduction.md
- name: API Reference
href: api/