internal/lsp: new requests.ts to generate new versions of tsclient.go and tsserver.go
Adjust the output of requests.ts to use the new facilities of jsonrpc2.go.
Change-Id: I316f7846db9f683345b836915d992e751f126196
Reviewed-on: https://go-review.googlesource.com/c/tools/+/184081
Reviewed-by: Ian Cottrell <iancottrell@google.com>
diff --git a/internal/lsp/protocol/typescript/requests.ts b/internal/lsp/protocol/typescript/requests.ts
index 53063f4..9110d9a 100644
--- a/internal/lsp/protocol/typescript/requests.ts
+++ b/internal/lsp/protocol/typescript/requests.ts
@@ -62,11 +62,15 @@
// 2. serverHandler(...) { return func(...) { switch r.method}}
// 3. func (x *xDispatcher) Method(ctx, parm)
not.forEach(
- (v, k) => {receives.get(k) == 'client' ? goNot(client, k) :
- goNot(server, k)});
+ (v, k) => {
+ receives.get(k) == 'client' ? goNot(client, k) :
+ goNot(server, k)
+ });
req.forEach(
- (v, k) => {receives.get(k) == 'client' ? goReq(client, k) :
- goReq(server, k)});
+ (v, k) => {
+ receives.get(k) == 'client' ? goReq(client, k) :
+ goReq(server, k)
+ });
// and print the Go code
output(client);
output(server);
@@ -94,7 +98,7 @@
}
const notNil = `if r.Params != nil {
- conn.Reply(ctx, r, nil, jsonrpc2.NewErrorf(jsonrpc2.CodeInvalidParams, "Expected no params"))
+ r.Reply(ctx, nil, jsonrpc2.NewErrorf(jsonrpc2.CodeInvalidParams, "Expected no params"))
return
}`;
// Go code for notifications. Side is client or server, m is the request method
@@ -109,7 +113,7 @@
if (a != '') {
case1 = `var params ${a}
if err := json.Unmarshal(*r.Params, ¶ms); err != nil {
- sendParseError(ctx, log, conn, r, err)
+ sendParseError(ctx, log, r, err)
return
}
if err := ${side.name}.${nm}(ctx, ¶ms); err != nil {
@@ -148,7 +152,7 @@
if (a != '') {
case1 = `var params ${a}
if err := json.Unmarshal(*r.Params, ¶ms); err != nil {
- sendParseError(ctx, log, conn, r, err)
+ sendParseError(ctx, log, r, err)
return
}`;
}
@@ -158,12 +162,12 @@
}`;
if (b != '') {
case2 = `resp, err := ${side.name}.${nm}(ctx${arg2})
- if err := conn.Reply(ctx, r, resp, err); err != nil {
+ if err := r.Reply(ctx, resp, err); err != nil {
log.Errorf(ctx, "%v", err)
}`;
} else { // response is nil
case2 = `err := ${side.name}.${nm}(ctx${arg2})
- if err := conn.Reply(ctx, r, nil, err); err != nil {
+ if err := r.Reply(ctx, nil, err); err != nil {
log.Errorf(ctx, "%v", err)
}`
}
@@ -178,7 +182,7 @@
!b.startsWith('[]') && !b.startsWith('interface') && (theRet = '&result');
callBody = `var result ${b}
if err := s.Conn.Call(ctx, "${m}", ${
- p2}, &result); err != nil {
+ p2}, &result); err != nil {
return nil, err
}
return ${theRet}, nil
@@ -206,7 +210,7 @@
function output(side: side) {
if (side.outputFile === undefined) side.outputFile = `ts${side.name}.go`;
side.fd = fs.openSync(side.outputFile, 'w');
- const f = function(s: string) {
+ const f = function (s: string) {
fs.writeSync(side.fd, s);
fs.writeSync(side.fd, '\n');
};
@@ -223,24 +227,24 @@
`);
const a = side.name[0].toUpperCase() + side.name.substring(1)
f(`type ${a} interface {`);
- side.methods.forEach((v) => {f(v)});
+ side.methods.forEach((v) => { f(v) });
f('}\n');
f(`func ${side.name}Handler(log xlog.Logger, ${side.name} ${
- side.goName}) jsonrpc2.Handler {
- return func(ctx context.Context, conn *jsonrpc2.Conn, r *jsonrpc2.Request) {
+ side.goName}) jsonrpc2.Handler {
+ return func(ctx context.Context, r *jsonrpc2.Request) {
switch r.Method {
case "$/cancelRequest":
var params CancelParams
if err := json.Unmarshal(*r.Params, ¶ms); err != nil {
- sendParseError(ctx, log, conn, r, err)
+ sendParseError(ctx, log, r, err)
return
}
- conn.Cancel(params.ID)`);
- side.cases.forEach((v) => {f(v)});
+ r.Conn().Cancel(params.ID)`);
+ side.cases.forEach((v) => { f(v) });
f(`
default:
if r.IsNotify() {
- conn.Reply(ctx, r, nil, jsonrpc2.NewErrorf(jsonrpc2.CodeMethodNotFound, "method %q not found", r.Method))
+ r.Reply(ctx, nil, jsonrpc2.NewErrorf(jsonrpc2.CodeMethodNotFound, "method %q not found", r.Method))
}
}
}
@@ -250,7 +254,7 @@
*jsonrpc2.Conn
}
`);
- side.calls.forEach((v) => {f(v)});
+ side.calls.forEach((v) => { f(v) });
if (side.name == 'server')
f(`
type CancelParams struct {
@@ -271,19 +275,19 @@
fd?: number
}
let client: side =
- {methods: [], cases: [], calls: [], name: 'client', goName: 'Client'};
+ { methods: [], cases: [], calls: [], name: 'client', goName: 'Client' };
let server: side =
- {methods: [], cases: [], calls: [], name: 'server', goName: 'Server'};
+ { methods: [], cases: [], calls: [], name: 'server', goName: 'Server' };
let req = new Map<string, ts.NewExpression>(); // requests
let not = new Map<string, ts.NewExpression>(); // notifications
-let receives = new Map<string, 'server'|'client'>(); // who receives it
+let receives = new Map<string, 'server' | 'client'>(); // who receives it
function setReceives() {
// mark them all as server, then adjust the client ones.
// it would be nice to have some independent check
- req.forEach((_, k) => {receives.set(k, 'server')});
- not.forEach((_, k) => {receives.set(k, 'server')});
+ req.forEach((_, k) => { receives.set(k, 'server') });
+ not.forEach((_, k) => { receives.set(k, 'server') });
receives.set('window/logMessage', 'client');
receives.set('telemetry/event', 'client');
receives.set('client/registerCapability', 'client');
@@ -321,7 +325,7 @@
if (ts.isUnionTypeNode(n)) {
let x: string[] = [];
n.types.forEach(
- (v) => {v.kind != ts.SyntaxKind.NullKeyword && x.push(goType(m, v))});
+ (v) => { v.kind != ts.SyntaxKind.NullKeyword && x.push(goType(m, v)) });
if (x.length == 1) return x[0];
prb(`===========${m} ${x}`)
@@ -343,10 +347,10 @@
// process the right kind of new expression
const wh = node.expression.getText();
if (wh != 'RequestType' && wh != 'RequestType0' && wh != 'NotificationType' &&
- wh != 'NotificationType0')
+ wh != 'NotificationType0')
return;
if (node.arguments === undefined || node.arguments.length != 1 ||
- !ts.isStringLiteral(node.arguments[0])) {
+ !ts.isStringLiteral(node.arguments[0])) {
throw new Error(`missing n.arguments ${loc(node)}`)
}
// RequestType<useful>=new RequestTYpe('foo')
@@ -446,7 +450,7 @@
const n = fn.search(/-node./)
fn = fn.substring(n + 6)
return `${fn} ${x.line + 1}: ${x.character + 1} (${y.line + 1}: ${
- y.character + 1})`
+ y.character + 1})`
}
// ad hoc argument parsing: [-d dir] [-o outputfile], and order matters
@@ -466,7 +470,7 @@
}
createOutputFiles()
generate(
- files, {target: ts.ScriptTarget.ES5, module: ts.ModuleKind.CommonJS});
+ files, { target: ts.ScriptTarget.ES5, module: ts.ModuleKind.CommonJS });
}
main()