Get started with a prettier server package
Co-Authored-By: Antonio Scandurra <antonio@zed.dev>
This commit is contained in:
parent
76191fe47d
commit
eced842dfc
7 changed files with 102 additions and 0 deletions
4
Cargo.lock
generated
4
Cargo.lock
generated
|
@ -5517,6 +5517,10 @@ version = "0.2.17"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "prettier"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pretty_assertions"
|
name = "pretty_assertions"
|
||||||
version = "1.4.0"
|
version = "1.4.0"
|
||||||
|
|
|
@ -52,6 +52,7 @@ members = [
|
||||||
"crates/plugin",
|
"crates/plugin",
|
||||||
"crates/plugin_macros",
|
"crates/plugin_macros",
|
||||||
"crates/plugin_runtime",
|
"crates/plugin_runtime",
|
||||||
|
"crates/prettier",
|
||||||
"crates/project",
|
"crates/project",
|
||||||
"crates/project_panel",
|
"crates/project_panel",
|
||||||
"crates/project_symbols",
|
"crates/project_symbols",
|
||||||
|
|
9
crates/prettier/Cargo.toml
Normal file
9
crates/prettier/Cargo.toml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
[package]
|
||||||
|
name = "prettier"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
path = "src/prettier.rs"
|
7
crates/prettier/prettier_server/.zed/settings.json
Normal file
7
crates/prettier/prettier_server/.zed/settings.json
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"languages": {
|
||||||
|
"JavaScript": {
|
||||||
|
"tab_size": 4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
crates/prettier/prettier_server/package.json
Normal file
11
crates/prettier/prettier_server/package.json
Normal 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"
|
||||||
|
}
|
56
crates/prettier/prettier_server/src/index.js
Normal file
56
crates/prettier/prettier_server/src/index.js
Normal 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);
|
||||||
|
}
|
14
crates/prettier/src/prettier.rs
Normal file
14
crates/prettier/src/prettier.rs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue