Get started with a prettier server package

Co-Authored-By: Antonio Scandurra <antonio@zed.dev>
This commit is contained in:
Julia 2023-08-22 16:12:59 -04:00 committed by Kirill Bulatov
parent 76191fe47d
commit eced842dfc
7 changed files with 102 additions and 0 deletions

4
Cargo.lock generated
View file

@ -5517,6 +5517,10 @@ version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
[[package]]
name = "prettier"
version = "0.1.0"
[[package]]
name = "pretty_assertions"
version = "1.4.0"

View file

@ -52,6 +52,7 @@ members = [
"crates/plugin",
"crates/plugin_macros",
"crates/plugin_runtime",
"crates/prettier",
"crates/project",
"crates/project_panel",
"crates/project_symbols",

View file

@ -0,0 +1,9 @@
[package]
name = "prettier"
version = "0.1.0"
edition = "2021"
[dependencies]
[lib]
path = "src/prettier.rs"

View file

@ -0,0 +1,7 @@
{
"languages": {
"JavaScript": {
"tab_size": 4
}
}
}

View file

@ -0,0 +1,11 @@
{
"name": "prettier_server",
"version": "1.0.0",
"description": "",
"main": "src/index.js",
"scripts": {
"start": "node src/index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Zed Industries"
}

View file

@ -0,0 +1,56 @@
const { Buffer } = require('buffer');
let buffer = Buffer.alloc(0);
process.stdin.resume();
process.stdin.on('data', (data) => {
buffer = Buffer.concat([buffer, data]);
handleData();
});
process.stdin.on('end', () => {
handleData();
});
function handleData() {
if (buffer.length < 4) {
return;
}
const length = buffer.readUInt32LE(0);
console.log(length);
if (buffer.length < 4 + length) {
return;
}
const bytes = buffer.subarray(4, 4 + length);
buffer = buffer.subarray(4 + length);
try {
const message = JSON.parse(bytes);
handleMessage(message);
} catch (_) {
sendResponse(makeError("Request JSON parse error"));
return;
}
}
// format
// clear_cache
// shutdown
// error
function handleMessage(message) {
console.log(message);
sendResponse({ method: "hi", result: null });
}
function makeError(message) {
return { method: "error", message };
}
function sendResponse(response) {
let message = Buffer.from(JSON.stringify(response));
let length = Buffer.alloc(4);
length.writeUInt32LE(message.length);
process.stdout.write(length);
process.stdout.write(message);
}

View file

@ -0,0 +1,14 @@
pub fn add(left: usize, right: usize) -> usize {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}