Skip to content

Commit

Permalink
Update to Volar 2.0.0-alpha.10
Browse files Browse the repository at this point in the history
This also adds customization of markdown based validation.
  • Loading branch information
remcohaszing committed Dec 21, 2023
1 parent b508976 commit 46bfd50
Show file tree
Hide file tree
Showing 10 changed files with 165 additions and 79 deletions.
6 changes: 6 additions & 0 deletions .changeset/beige-dolphins-shave.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@mdx-js/language-server": minor
"vscode-mdx": minor
---

Add customization options for markdown validation.
7 changes: 7 additions & 0 deletions .changeset/plenty-cherries-move.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@mdx-js/language-service": patch
"@mdx-js/language-server": patch
"vscode-mdx": patch
---

Update to Volar 2.0.0-alpha.10.
68 changes: 65 additions & 3 deletions packages/language-server/index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,73 @@
#!/usr/bin/env node
import assert from 'node:assert'
import process from 'node:process'
import {
createMdxLanguagePlugin,
createMdxServicePlugin
} from '@mdx-js/language-service'
import {
createConnection,
startTypeScriptServer
createNodeServer,
createTypeScriptProjectProvider
} from '@volar/language-server/node.js'
import {plugin} from './lib/language-server-plugin.js'
import {create as createMarkdownServicePlugin} from 'volar-service-markdown'
import {create as createTypeScriptServicePlugin} from 'volar-service-typescript'
import {loadPlugins} from './lib/configuration.js'

process.title = 'mdx-language-server'

startTypeScriptServer(createConnection(), plugin)
const connection = createConnection()
const server = createNodeServer(connection)

connection.onInitialize((parameters) =>
server.initialize(parameters, createTypeScriptProjectProvider, {
watchFileExtensions: [
'cjs',
'cts',
'js',
'jsx',
'json',
'mdx',
'mjs',
'mts',
'ts',
'tsx'
],

getServerCapabilitiesSetup() {
assert(server.modules.typescript, 'TypeScript module is missing')

return {
servicePlugins: [
createMarkdownServicePlugin({configurationSection: 'mdx.validate'}),
createMdxServicePlugin(),
createTypeScriptServicePlugin(server.modules.typescript)
]
}
},

async getProjectSetup(serviceEnvironment, projectContext) {
assert(server.modules.typescript, 'TypeScript module is missing')

const plugins = await loadPlugins(
projectContext?.typescript?.configFileName,
server.modules.typescript
)

return {
languagePlugins: [createMdxLanguagePlugin(plugins)],
servicePlugins: [
createMarkdownServicePlugin({configurationSection: 'mdx.validate'}),
createMdxServicePlugin(),
createTypeScriptServicePlugin(server.modules.typescript)
]
}
}
})
)

connection.onInitialized(() => {
server.initialized()
})

connection.listen()
57 changes: 0 additions & 57 deletions packages/language-server/lib/language-server-plugin.js

This file was deleted.

8 changes: 4 additions & 4 deletions packages/language-server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,18 @@
},
"dependencies": {
"@mdx-js/language-service": "0.4.0",
"@volar/language-server": "2.0.0-alpha.7",
"@volar/language-server": "2.0.0-alpha.10",
"load-plugin": "^5.0.0",
"remark-frontmatter": "^5.0.0",
"remark-gfm": "^4.0.0",
"volar-service-markdown": "0.0.22",
"volar-service-typescript": "0.0.22",
"volar-service-markdown": "0.0.24",
"volar-service-typescript": "0.0.24",
"vscode-uri": "^3.0.0"
},
"devDependencies": {
"@types/node": "^20.0.0",
"@types/normalize-path": "^3.0.0",
"@volar/test-utils": "2.0.0-alpha.7",
"@volar/test-utils": "2.0.0-alpha.10",
"normalize-path": "^3.0.0",
"unified": "^11.0.0"
}
Expand Down
2 changes: 1 addition & 1 deletion packages/language-server/test/initialize.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ test('initialize', async () => {
},
serverInfo: {
name: '@volar/language-server',
version: '2.0.0-alpha.7'
version: '2.0.0-alpha.10'
}
})
})
4 changes: 4 additions & 0 deletions packages/language-service/lib/language-plugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ export function createMdxLanguagePlugin(plugins) {
},

typescript: {
extraFileExtensions: [
{extension: 'mdx', isMixedContent: true, scriptKind: 7}
],

resolveSourceFileName(tsFileName) {
if (tsFileName.endsWith('.mdx.jsx')) {
// .mdx.jsx → .mdx
Expand Down
2 changes: 1 addition & 1 deletion packages/language-service/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
"@types/estree": "^1.0.0",
"@types/mdast": "^4.0.0",
"@types/unist": "^3.0.0",
"@volar/language-service": "2.0.0-alpha.7",
"@volar/language-service": "2.0.0-alpha.10",
"estree-walker": "^3.0.0",
"mdast-util-mdxjs-esm": "^2.0.0",
"remark-mdx": "^3.0.0",
Expand Down
71 changes: 69 additions & 2 deletions packages/vscode-mdx/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@
"@types/mdast": "^4.0.0",
"@types/node": "^20.0.0",
"@types/vscode": "^1.82.0",
"@volar/language-server": "2.0.0-alpha.7",
"@volar/vscode": "2.0.0-alpha.7",
"@volar/language-server": "2.0.0-alpha.10",
"@volar/vscode": "2.0.0-alpha.10",
"@vscode/vsce": "^2.0.0",
"esbuild": "^0.19.0",
"mdast-util-to-markdown": "^2.0.0",
Expand Down Expand Up @@ -87,6 +87,73 @@
],
"default": "text",
"description": "How to format traced MDX language server requests."
},
"mdx.validate.validateReferences": {
"enum": [
"ignore",
"hint",
"warning",
"error"
],
"default": "warning",
"markdownDescription": "Diagnostic level for invalid reference links, e.g. `[text][no-such-ref]`."
},
"mdx.validate.validateFragmentLinks": {
"enum": [
"ignore",
"hint",
"warning",
"error"
],
"default": "warning",
"markdownDescription": "Diagnostic level for fragments links to headers in the current file that don't exist, e.g. `[text](#no-such-header)`."
},
"mdx.validate.validateFileLinks": {
"enum": [
"ignore",
"hint",
"warning",
"error"
],
"default": "warning",
"markdownDescription": "Diagnostic level for links to local files that don't exist, e.g. `[text](./no-such-file.png)`."
},
"mdx.validate.validateMarkdownFileLinkFragments": {
"enum": [
"ignore",
"hint",
"warning",
"error"
],
"default": "warning",
"markdownDescription": "Diagnostic level for the fragment part of links to other local markdown files , e.g. `[text](./file.md#no-such-header)`."
},
"mdx.validate.validateUnusedLinkDefinitions": {
"enum": [
"ignore",
"hint",
"warning",
"error"
],
"default": "warning",
"markdownDescription": "Diagnostic level for link definitions that aren't used anywhere. `[never-used]: http://example.com`."
},
"mdx.validate.validateDuplicateLinkDefinitions": {
"enum": [
"ignore",
"hint",
"warning",
"error"
],
"default": "warning",
"markdownDescription": "Diagnostic level for duplicate link definitions."
},
"mdx.validate.ignoreLinks": {
"type": "array",
"items": {
"type": "string"
},
"markdownDescription": "Glob of links that should not be validated."
}
}
}
Expand Down
19 changes: 8 additions & 11 deletions packages/vscode-mdx/src/extension.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
/**
* @typedef {import('@volar/vscode').ExportsInfoForLabs} ExportsInfoForLabs
* @typedef {import('@volar/vscode').LabsInfo} LabsInfo
* @typedef {import('vscode').ExtensionContext} ExtensionContext
*/

import * as languageServerProtocol from '@volar/language-server/protocol.js'
import {
activateAutoInsertion,
activateTsVersionStatusItem,
getTsdk,
supportLabsVersion
createLabsInfo,
getTsdk
} from '@volar/vscode'
import {
Disposable,
Expand All @@ -35,7 +35,7 @@ let disposable
*
* @param {ExtensionContext} context
* The extension context as given by VSCode.
* @returns {Promise<ExportsInfoForLabs>}
* @returns {Promise<LabsInfo>}
* Info for the
* [Volar,js Labs](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.volarjs-labs)
* extension.
Expand Down Expand Up @@ -67,13 +67,10 @@ export async function activate(context) {
})
)

return {
volarLabs: {
version: supportLabsVersion,
languageClient: client,
languageServerProtocol
}
}
const volarLabs = createLabsInfo(languageServerProtocol)
volarLabs.addLanguageClient(client)

return volarLabs.extensionExports

async function tryRestartServer() {
await stopServer()
Expand Down

0 comments on commit 46bfd50

Please sign in to comment.