mirror of
https://github.com/microsoft/vscode.git
synced 2025-12-25 04:36:23 +00:00
add client/server browser parts
This commit is contained in:
@@ -1,15 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { ExtensionContext, window } from 'vscode';
|
||||
//import { startClient } from '../cssClient';
|
||||
|
||||
// this method is called when vs code is activated
|
||||
export function activate(_context: ExtensionContext) {
|
||||
|
||||
window.showInformationMessage('cssClientBrowserMain.ts running');
|
||||
|
||||
//startClient(context, {});
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { ExtensionContext, window } from 'vscode';
|
||||
import { CommonLanguageClient, LanguageClientOptions, MessageTransports } from 'vscode-languageclient';
|
||||
import { startClient, LanguageClientConstructor } from '../cssClient';
|
||||
import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-jsonrpc/lib/browser/main';
|
||||
|
||||
declare const Worker: {
|
||||
new(stringUrl: string): any;
|
||||
};
|
||||
|
||||
class BrowserLanguageClient extends CommonLanguageClient {
|
||||
|
||||
constructor(id: string, name: string, clientOptions: LanguageClientOptions, private worker: any) {
|
||||
super(id, name, clientOptions);
|
||||
}
|
||||
|
||||
protected createMessageTransports(_encoding: string): Promise<MessageTransports> {
|
||||
const reader = new BrowserMessageReader(this.worker);
|
||||
const writer = new BrowserMessageWriter(this.worker);
|
||||
return Promise.resolve({ reader, writer });
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// this method is called when vs code is activated
|
||||
export function activate(context: ExtensionContext) {
|
||||
const serverMain = context.asAbsolutePath('server/dist/browser/cssServerMain.js');
|
||||
try {
|
||||
const worker = new Worker(serverMain);
|
||||
const newLanguageClient: LanguageClientConstructor = (id: string, name: string, clientOptions: LanguageClientOptions) => {
|
||||
return new BrowserLanguageClient(id, name, clientOptions, worker);
|
||||
};
|
||||
|
||||
startClient(context, newLanguageClient, {});
|
||||
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
export interface Options {
|
||||
locale?: string;
|
||||
cacheLanguageResolution?: boolean;
|
||||
}
|
||||
export interface LocalizeInfo {
|
||||
key: string;
|
||||
comment: string[];
|
||||
}
|
||||
export interface LocalizeFunc {
|
||||
(info: LocalizeInfo, message: string, ...args: any[]): string;
|
||||
(key: string, message: string, ...args: any[]): string;
|
||||
}
|
||||
export interface LoadFunc {
|
||||
(file?: string): LocalizeFunc;
|
||||
}
|
||||
|
||||
function format(message: string, args: any[]): string {
|
||||
let result: string;
|
||||
|
||||
if (args.length === 0) {
|
||||
result = message;
|
||||
} else {
|
||||
result = message.replace(/\{(\d+)\}/g, (match, rest) => {
|
||||
let index = rest[0];
|
||||
return typeof args[index] !== 'undefined' ? args[index] : match;
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function localize(_key: string | LocalizeInfo, message: string, ...args: any[]): string {
|
||||
return format(message, args);
|
||||
}
|
||||
|
||||
export function loadMessageBundle(_file?: string): LocalizeFunc {
|
||||
return localize;
|
||||
}
|
||||
|
||||
export function config(_opt?: Options | string): LoadFunc {
|
||||
return loadMessageBundle;
|
||||
}
|
||||
@@ -9,15 +9,40 @@
|
||||
|
||||
const withDefaults = require('../shared.webpack.config');
|
||||
const path = require('path');
|
||||
const webpack = require('webpack');
|
||||
|
||||
module.exports = withDefaults({
|
||||
const vscodeNlsReplacement = new webpack.NormalModuleReplacementPlugin(
|
||||
/vscode\-nls\/lib\/main\.js/,
|
||||
path.join(__dirname, 'client/out/browser/vscodeNlsShim.js')
|
||||
);
|
||||
|
||||
const clientConfig = withDefaults({
|
||||
target: 'webworker',
|
||||
context: path.join(__dirname, 'client'),
|
||||
entry: {
|
||||
extension: './src/browser/cssClientBrowserMain.ts',
|
||||
extension: './src/browser/cssClientMain.ts'
|
||||
},
|
||||
output: {
|
||||
filename: 'cssClientBrowserMain.js',
|
||||
filename: 'cssClientMain.js',
|
||||
path: path.join(__dirname, 'client', 'dist', 'browser')
|
||||
}
|
||||
});
|
||||
clientConfig.plugins[1] = vscodeNlsReplacement; // replace nls bundler
|
||||
clientConfig.module.rules[0].use.shift(); // remove nls loader
|
||||
|
||||
const serverConfig = withDefaults({
|
||||
target: 'webworker',
|
||||
context: path.join(__dirname, 'server'),
|
||||
entry: {
|
||||
extension: './src/browser/cssServerMain.ts',
|
||||
},
|
||||
output: {
|
||||
filename: 'cssServerMain.js',
|
||||
path: path.join(__dirname, 'server', 'dist', 'browser'),
|
||||
libraryTarget: 'var'
|
||||
}
|
||||
});
|
||||
serverConfig.plugins[1] = vscodeNlsReplacement; // replace nls bundler
|
||||
serverConfig.module.rules[0].use.shift(); // remove nls loader
|
||||
|
||||
module.exports = [clientConfig, serverConfig];
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
"onCommand:_css.applyCodeAction"
|
||||
],
|
||||
"main": "./client/out/node/cssClientMain",
|
||||
"browser": "./client/dist/browser/cssClientBrowserMain",
|
||||
"browser": "./client/dist/browser/cssClientMain",
|
||||
"enableProposedApi": true,
|
||||
"scripts": {
|
||||
"compile": "gulp compile-extension:css-language-features-client compile-extension:css-language-features-server",
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
"node": "*"
|
||||
},
|
||||
"main": "./out/node/cssServerMain",
|
||||
"browser": "./dist/browser/cssServerMain",
|
||||
"dependencies": {
|
||||
"vscode-css-languageservice": "4.3.0-next.1",
|
||||
"vscode-languageserver": "^6.1.1",
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { ProtocolConnection, createProtocolConnection, Logger, createConnection, InitializeParams, WatchDog } from 'vscode-languageserver';
|
||||
import { startServer } from '../cssServer';
|
||||
import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-jsonrpc/lib/browser/main';
|
||||
|
||||
declare let self: any;
|
||||
|
||||
const messageReader = new BrowserMessageReader(self);
|
||||
const messageWriter = new BrowserMessageWriter(self);
|
||||
|
||||
const watchDog: WatchDog = {
|
||||
shutdownReceived: false,
|
||||
initialize(_params: InitializeParams): void { },
|
||||
exit(_code: number): void { }
|
||||
};
|
||||
|
||||
const connectionFactory = (logger: Logger): ProtocolConnection => {
|
||||
return createProtocolConnection(messageReader, messageWriter, logger);
|
||||
};
|
||||
const connection = createConnection(connectionFactory, watchDog);
|
||||
|
||||
startServer(connection, {});
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import {
|
||||
Connection, TextDocuments, InitializeParams, InitializeResult, ServerCapabilities, ConfigurationRequest, WorkspaceFolder, TextDocumentSyncKind, NotificationType
|
||||
} from 'vscode-languageserver';
|
||||
} from 'vscode-languageserver/lib/common/api';
|
||||
import { URI } from 'vscode-uri';
|
||||
import { getCSSLanguageService, getSCSSLanguageService, getLESSLanguageService, LanguageSettings, LanguageService, Stylesheet, TextDocument, Position } from 'vscode-css-languageservice';
|
||||
import { getLanguageModelCache } from './languageModelCache';
|
||||
|
||||
@@ -6,7 +6,7 @@ import 'mocha';
|
||||
import * as assert from 'assert';
|
||||
import * as path from 'path';
|
||||
import { URI } from 'vscode-uri';
|
||||
import { TextDocument, CompletionList } from 'vscode-languageserver-types';
|
||||
import { TextDocument, CompletionList, TextEdit } from 'vscode-languageserver-types';
|
||||
import { WorkspaceFolder } from 'vscode-languageserver-protocol';
|
||||
import { getCSSLanguageService, LanguageServiceOptions, getSCSSLanguageService } from 'vscode-css-languageservice';
|
||||
import { getNodeFSRequestService } from '../node/nodeFs';
|
||||
@@ -26,7 +26,7 @@ suite('Completions', () => {
|
||||
|
||||
assert.equal(matches.length, 1, `${expected.label} should only existing once: Actual: ${completions.items.map(c => c.label).join(', ')}`);
|
||||
let match = matches[0];
|
||||
if (expected.resultText && match.textEdit) {
|
||||
if (expected.resultText && TextEdit.is(match.textEdit)) {
|
||||
assert.equal(TextDocument.applyEdits(document, [match.textEdit]), expected.resultText);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user