From 05f88d0f2f7d14ca50eb4db35b385a52c430da7a Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Mon, 24 Oct 2022 15:39:37 -0700 Subject: [PATCH] Pick up latest markdown language service and clean up server package - Picks up newest markdown language service - Excludes some files from server publish - Delete unused file - Update readme - Align server version with LS version --- .../server/README.md | 6 +- .../server/package.json | 9 +- .../server/package/README.md | 135 ++++++++++++++++++ .../server/package/package.json | 32 +++++ .../server/src/util/arrays.ts | 11 -- .../server/yarn.lock | 8 +- 6 files changed, 183 insertions(+), 18 deletions(-) create mode 100644 extensions/markdown-language-features/server/package/README.md create mode 100644 extensions/markdown-language-features/server/package/package.json delete mode 100644 extensions/markdown-language-features/server/src/util/arrays.ts diff --git a/extensions/markdown-language-features/server/README.md b/extensions/markdown-language-features/server/README.md index 6b6e0b0c81cae..1fd38302195ff 100644 --- a/extensions/markdown-language-features/server/README.md +++ b/extensions/markdown-language-features/server/README.md @@ -34,7 +34,7 @@ This server uses the [Markdown Language Service](https://github.com/microsoft/vs - Organize link definitions source action. - Extract link to definition refactoring. -- (experimental) Updating links when a file is moved / renamed. Uses a custom `markdown/getEditForFileRenames` message. +- Updating links when a file is moved / renamed. Uses a custom `markdown/getEditForFileRenames` message. - [Pull diagnostics (validation)](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_pullDiagnostics) for links. @@ -56,6 +56,10 @@ The server supports the following settings: - `suggest` - `paths` - `enabled` — Enable/disable path suggestions. + + - `occurrencesHighlight` + - `enabled` — Enable/disable highlighting of link occurrences. + - `validate` - `enabled` — Enable/disable all validation. - `referenceLinks` diff --git a/extensions/markdown-language-features/server/package.json b/extensions/markdown-language-features/server/package.json index 9f0d83e079321..c7540437c7d39 100644 --- a/extensions/markdown-language-features/server/package.json +++ b/extensions/markdown-language-features/server/package.json @@ -1,7 +1,7 @@ { "name": "vscode-markdown-languageserver", "description": "Markdown language server", - "version": "0.0.0-alpha-5", + "version": "0.2.0-alpha.4", "author": "Microsoft Corporation", "license": "MIT", "engines": { @@ -9,11 +9,15 @@ }, "main": "./out/node/main", "browser": "./dist/browser/main", + "files": [ + "dist/**/*.js", + "out/**/*.js" + ], "dependencies": { "vscode-languageserver": "^8.0.2", "vscode-languageserver-textdocument": "^1.0.5", "vscode-languageserver-types": "^3.17.1", - "vscode-markdown-languageservice": "^0.2.0-alpha.3", + "vscode-markdown-languageservice": "^0.2.0-alpha.4", "vscode-nls": "^5.2.0", "vscode-uri": "^3.0.3" }, @@ -22,6 +26,7 @@ }, "scripts": { "compile": "gulp compile-extension:markdown-language-features-server", + "prepublishOnly": "npm run compile", "watch": "gulp watch-extension:markdown-language-features-server" } } diff --git a/extensions/markdown-language-features/server/package/README.md b/extensions/markdown-language-features/server/package/README.md new file mode 100644 index 0000000000000..1fd38302195ff --- /dev/null +++ b/extensions/markdown-language-features/server/package/README.md @@ -0,0 +1,135 @@ +# Markdown Language Server + +> **❗ Import** This is still in development. While the language server is being used by VS Code, it has not yet been tested with other clients. + +The Markdown language server powers VS Code's built-in markdown support, providing tools for writing and browsing Markdown files. It runs as a separate executable and implements the [language server protocol](https://microsoft.github.io/language-server-protocol/overview). + +This server uses the [Markdown Language Service](https://github.com/microsoft/vscode-markdown-languageservice) to implement almost all of the language features. You can use that library if you need a library for working with Markdown instead of a full language server. + + +## Server capabilities + +- [Completions](https://microsoft.github.io/language-server-protocol/specification#textDocument_completion) for Markdown links. + +- [Folding](https://microsoft.github.io/language-server-protocol/specification#textDocument_foldingRange) of Markdown regions, block elements, and header sections. + +- [Smart selection](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_selectionRange) for inline elements, block elements, and header sections. + +- [Document Symbols](https://microsoft.github.io/language-server-protocol/specification#textDocument_documentSymbol) for quick navigation to headers in a document. + +- [Workspace Symbols](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_symbol) for quick navigation to headers in the workspace + +- [Document links](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_documentLink) for making Markdown links in a document clickable. + +- [Find all references](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_references) to headers and links across all Markdown files in the workspace. + +- [Go to definition](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_definition) from links to headers or link definitions. + +- [Rename](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_rename) of headers and links across all Markdown files in the workspace. + +- Find all references to a file. Uses a custom `markdown/getReferencesToFileInWorkspace` message. + +- [Code Actions](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_codeAction) + + - Organize link definitions source action. + - Extract link to definition refactoring. + +- Updating links when a file is moved / renamed. Uses a custom `markdown/getEditForFileRenames` message. + +- [Pull diagnostics (validation)](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_pullDiagnostics) for links. + + +## Client requirements + +### Initialization options + +The client can send the following initialization options to the server: + +- `markdownFileExtensions` Array file extensions that should be considered as Markdown. These should not include the leading `.`. For example: `['md', 'mdown', 'markdown']`. + +### Settings + +Clients may send a `workspace/didChangeConfiguration` notification to notify the server of settings changes. +The server supports the following settings: + +- `markdown` + - `suggest` + - `paths` + - `enabled` — Enable/disable path suggestions. + + - `occurrencesHighlight` + - `enabled` — Enable/disable highlighting of link occurrences. + + - `validate` + - `enabled` — Enable/disable all validation. + - `referenceLinks` + - `enabled` — Enable/disable validation of reference links: `[text][ref]` + - `fragmentLinks` + - `enabled` — Enable/disable validation of links to fragments in the current files: `[text](#head)` + - `fileLinks` + - `enabled` — Enable/disable validation of links to file in the workspace. + - `markdownFragmentLinks` — Enable/disable validation of links to headers in other Markdown files. Use `inherit` to inherit the `fragmentLinks` setting. + - `ignoredLinks` — Array of glob patterns for files that should not be validated. + - `unusedLinkDefinitions` + - `enabled` — Enable/disable validation of unused link definitions. + - `duplicateLinkDefinitions` + - `enabled` — Enable/disable validation of duplicated link definitions. + +### Custom requests + +To support all of the features of the language server, the client needs to implement a few custom request types. The definitions of these request types can be found in [`protocol.ts`](./src/protocol.ts) + +#### `markdown/parse` + +Get the tokens for a Markdown file. Clients are expected to use [Markdown-it](https://github.com/markdown-it/markdown-it) for this. + +We require that clients bring their own version of Markdown-it so that they can customize/extend Markdown-it. + +#### `markdown/fs/readFile` + +Read the contents of a file in the workspace. + +#### `markdown/fs/readDirectory` + +Read the contents of a directory in the workspace. + +#### `markdown/fs/stat` + +Check if a given file/directory exists in the workspace. + +#### `markdown/fs/watcher/create` + +Create a file watcher. This is needed for diagnostics support. + +#### `markdown/fs/watcher/delete` + +Delete a previously created file watcher. + +#### `markdown/findMarkdownFilesInWorkspace` + +Get a list of all markdown files in the workspace. + + +## Contribute + +The source code of the Markdown language server can be found in the [VSCode repository](https://github.com/microsoft/vscode) at [extensions/markdown-language-features/server](https://github.com/microsoft/vscode/tree/master/extensions/markdown-language-features/server). + +File issues and pull requests in the [VSCode GitHub Issues](https://github.com/microsoft/vscode/issues). See the document [How to Contribute](https://github.com/microsoft/vscode/wiki/How-to-Contribute) on how to build and run from source. + +Most of the functionality of the server is located in libraries: + +- [vscode-markdown-languageservice](https://github.com/microsoft/vscode-markdown-languageservice) contains the implementation of all features as a reusable library. +- [vscode-languageserver-node](https://github.com/microsoft/vscode-languageserver-node) contains the implementation of language server for NodeJS. + +Help on any of these projects is very welcome. + +## Code of Conduct + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. + +## License + +Copyright (c) Microsoft Corporation. All rights reserved. + +Licensed under the [MIT](https://github.com/microsoft/vscode/blob/master/LICENSE.txt) License. + diff --git a/extensions/markdown-language-features/server/package/package.json b/extensions/markdown-language-features/server/package/package.json new file mode 100644 index 0000000000000..c7540437c7d39 --- /dev/null +++ b/extensions/markdown-language-features/server/package/package.json @@ -0,0 +1,32 @@ +{ + "name": "vscode-markdown-languageserver", + "description": "Markdown language server", + "version": "0.2.0-alpha.4", + "author": "Microsoft Corporation", + "license": "MIT", + "engines": { + "node": "*" + }, + "main": "./out/node/main", + "browser": "./dist/browser/main", + "files": [ + "dist/**/*.js", + "out/**/*.js" + ], + "dependencies": { + "vscode-languageserver": "^8.0.2", + "vscode-languageserver-textdocument": "^1.0.5", + "vscode-languageserver-types": "^3.17.1", + "vscode-markdown-languageservice": "^0.2.0-alpha.4", + "vscode-nls": "^5.2.0", + "vscode-uri": "^3.0.3" + }, + "devDependencies": { + "@types/node": "16.x" + }, + "scripts": { + "compile": "gulp compile-extension:markdown-language-features-server", + "prepublishOnly": "npm run compile", + "watch": "gulp watch-extension:markdown-language-features-server" + } +} diff --git a/extensions/markdown-language-features/server/src/util/arrays.ts b/extensions/markdown-language-features/server/src/util/arrays.ts deleted file mode 100644 index 3ed55d8f0777b..0000000000000 --- a/extensions/markdown-language-features/server/src/util/arrays.ts +++ /dev/null @@ -1,11 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -/** - * @returns New array with all falsy values removed. The original array IS NOT modified. - */ -export function coalesce(array: ReadonlyArray): T[] { - return array.filter(e => !!e); -} diff --git a/extensions/markdown-language-features/server/yarn.lock b/extensions/markdown-language-features/server/yarn.lock index f67a995e09a2c..6f40976002795 100644 --- a/extensions/markdown-language-features/server/yarn.lock +++ b/extensions/markdown-language-features/server/yarn.lock @@ -42,10 +42,10 @@ vscode-languageserver@^8.0.2: dependencies: vscode-languageserver-protocol "3.17.2" -vscode-markdown-languageservice@^0.2.0-alpha.3: - version "0.2.0-alpha.3" - resolved "https://registry.yarnpkg.com/vscode-markdown-languageservice/-/vscode-markdown-languageservice-0.2.0-alpha.3.tgz#5bc3934ebb97ce855f49fbb345a5e1f5ace7d660" - integrity sha512-3ikmh1Mcr9s5s0wZZsxb7heSzKooudCgtZzL5d8t94WDbg02u9i2cDYF6qufK6Og5pBSC3ajeF12qFAYbRIbgQ== +vscode-markdown-languageservice@^0.2.0-alpha.4: + version "0.2.0-alpha.4" + resolved "https://registry.yarnpkg.com/vscode-markdown-languageservice/-/vscode-markdown-languageservice-0.2.0-alpha.4.tgz#51856ffa9750782bf952fe97765fb29c3ec27c06" + integrity sha512-a08s+AEwPTYqilMW8ZF3FAeDf+5pUo+XOgynPHvc70ABFTTr9fNVlg99quFUQINvi/eihH8+cd3/j/Qijeauew== dependencies: picomatch "^2.3.1" vscode-languageserver-textdocument "^1.0.5"