Skip to content

Commit 366a215

Browse files
committed
Created infrastructure for language server entry point
1 parent 097d543 commit 366a215

File tree

4 files changed

+67
-34
lines changed

4 files changed

+67
-34
lines changed

src/adept/src/main.rs

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use daemon::daemonize_main;
1+
use daemon::{connect_to_daemon, server_main, try_become_daemon};
22
use std::{iter::Peekable, process::ExitCode, time::Duration};
33

44
fn main() -> ExitCode {
@@ -7,7 +7,9 @@ fn main() -> ExitCode {
77
match args.peek().map(String::as_str) {
88
Some("-h" | "--help") | None => show_help(),
99
Some("--server") => start_server(),
10+
Some("--daemon") => start_daemon(args),
1011
Some("--oneshot") => start_oneshot(args),
12+
Some("--language-server") => start_language_server(args),
1113
_ => start_server(),
1214
}
1315
}
@@ -18,11 +20,35 @@ fn show_help() -> ExitCode {
1820
}
1921

2022
fn start_server() -> ExitCode {
21-
let path = std::env::current_dir().unwrap();
23+
let connection = match connect_to_daemon() {
24+
Ok(connection) => connection,
25+
Err(err) => {
26+
eprintln!("{}", err);
27+
return ExitCode::FAILURE;
28+
}
29+
};
30+
31+
println!("Connected! {:?}", connection);
32+
ExitCode::SUCCESS
33+
}
34+
35+
fn start_daemon(_args: Peekable<impl Iterator<Item = String>>) -> ExitCode {
36+
let path = std::env::current_dir().expect("failed to get current directory");
2237
let max_idle_time = Duration::from_secs(5 * 60);
23-
daemonize_main(path, max_idle_time)
38+
39+
match try_become_daemon(&path.clone(), || server_main(max_idle_time)) {
40+
Ok(()) => ExitCode::SUCCESS,
41+
Err(err) => {
42+
eprintln!("{}", err);
43+
ExitCode::FAILURE
44+
}
45+
}
2446
}
2547

2648
fn start_oneshot(_args: Peekable<impl Iterator<Item = String>>) -> ExitCode {
2749
todo!()
2850
}
51+
52+
fn start_language_server(_args: Peekable<impl Iterator<Item = String>>) -> ExitCode {
53+
todo!()
54+
}

src/components/daemon/src/error.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
use std::fmt::Display;
2+
3+
pub enum StartError {
4+
IoError(std::io::Error),
5+
FailedToStart,
6+
}
7+
8+
impl From<std::io::Error> for StartError {
9+
fn from(value: std::io::Error) -> Self {
10+
Self::IoError(value)
11+
}
12+
}
13+
14+
impl Display for StartError {
15+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
16+
match self {
17+
StartError::IoError(error) => write!(f, "{}", error),
18+
StartError::FailedToStart => write!(f, "Failed to start daemon"),
19+
}
20+
}
21+
}

src/components/daemon/src/lib.rs

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,31 @@
1+
mod error;
12
mod idle;
23
mod lockfile;
34
mod serve;
45
mod server;
56
mod startup;
67
mod watch;
78

8-
use crate::{
9-
server::server_main,
10-
startup::{spawn_daemon_process, try_become_daemon},
11-
};
12-
use std::{path::PathBuf, process::ExitCode, thread, time::Duration};
13-
14-
pub fn daemonize_main(path: PathBuf, max_idle_time: Duration) -> ExitCode {
15-
match start(path, max_idle_time) {
16-
Ok(()) => ExitCode::SUCCESS,
17-
Err(err) => {
18-
eprintln!("{}", err);
19-
ExitCode::FAILURE
20-
}
21-
}
22-
}
23-
24-
fn start(path: PathBuf, max_idle_time: Duration) -> std::io::Result<()> {
25-
let args: Vec<String> = std::env::args().collect();
26-
if args.contains(&"--daemon".into()) {
27-
return try_become_daemon(&path.clone(), || server_main(max_idle_time));
28-
}
9+
pub use error::*;
10+
pub use server::*;
11+
pub use startup::*;
12+
use std::{net::TcpStream, thread, time::Duration};
2913

14+
pub fn connect_to_daemon() -> Result<TcpStream, StartError> {
3015
// Try connecting to existing instance
31-
if std::net::TcpStream::connect("127.0.0.1:6000").is_ok() {
16+
if let Ok(connection) = std::net::TcpStream::connect("127.0.0.1:6000") {
3217
println!("Connected to existing daemon.");
33-
return Ok(());
18+
return Ok(connection);
3419
}
3520

36-
println!("No daemon found, launching one...");
3721
spawn_daemon_process()?;
3822

3923
for _ in 0..10 {
40-
if std::net::TcpStream::connect("127.0.0.1:6000").is_ok() {
41-
println!("Daemon started!");
42-
return Ok(());
24+
if let Ok(connection) = std::net::TcpStream::connect("127.0.0.1:6000") {
25+
return Ok(connection);
4326
}
44-
thread::sleep(Duration::from_millis(200));
27+
thread::sleep(Duration::from_millis(20));
4528
}
4629

47-
eprintln!("Failed to start daemon.");
48-
Ok(())
30+
Err(StartError::FailedToStart)
4931
}

src/components/req/src/lib.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,11 @@ macro_rules! log {
3838
$crate::log!("\n")
3939
};
4040
($($arg:tt)*) => {{
41-
eprintln!($($arg)*);
41+
if true {
42+
eprintln!($($arg)*);
43+
} else {
44+
let _ = format_args!($($arg)*);
45+
}
4246
}};
4347
}
4448

0 commit comments

Comments
 (0)