add support for crlf, add support for changing port
This commit is contained in:
		
							parent
							
								
									4b74b3930b
								
							
						
					
					
						commit
						eb79cf8cab
					
				
					 6 changed files with 34 additions and 13 deletions
				
			
		
							
								
								
									
										1
									
								
								.gitattributes
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitattributes
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
*.tree text=auto eol=lf
 | 
			
		||||
| 
						 | 
				
			
			@ -23,10 +23,10 @@ cargo run -p treehouse generate
 | 
			
		|||
This will spit out a directory `target/site` containing the static pages. You're free to use any HTTP server you wish, but for development purposes treehouse includes one in the CLI:
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
cargo run -p treehouse generate --serve
 | 
			
		||||
cargo run -p treehouse generate --serve 8080
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This will fire up a server on port 8080. No way to change that, sorry. Edit the source code.
 | 
			
		||||
This will fire up a server on port 8080.
 | 
			
		||||
 | 
			
		||||
If you're developing, you may wanna use [`cargo-watch`](https://crates.io/crates/cargo-watch):
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -81,6 +81,26 @@ impl<'a> Parser<'a> {
 | 
			
		|||
        self.advance();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn eat_until_line_break(&mut self) {
 | 
			
		||||
        loop {
 | 
			
		||||
            match self.current() {
 | 
			
		||||
                Some('\r') => {
 | 
			
		||||
                    self.advance();
 | 
			
		||||
                    if self.current() == Some('\n') {
 | 
			
		||||
                        self.advance();
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                Some('\n') => {
 | 
			
		||||
                    self.advance();
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
                Some(_) => self.advance(),
 | 
			
		||||
                None => break,
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn peek_indent_level(&mut self) -> usize {
 | 
			
		||||
        let position = self.position;
 | 
			
		||||
        let indent_level = self.eat_as_long_as(' ');
 | 
			
		||||
| 
						 | 
				
			
			@ -101,10 +121,10 @@ impl<'a> Parser<'a> {
 | 
			
		|||
                if self.current_starts_with("```") {
 | 
			
		||||
                    code_block = None;
 | 
			
		||||
                    self.position += 3;
 | 
			
		||||
                    self.eat_until(|c| c == '\n');
 | 
			
		||||
                    self.eat_until_line_break();
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                self.eat_until(|c| c == '\n');
 | 
			
		||||
                self.eat_until_line_break();
 | 
			
		||||
 | 
			
		||||
                if self.current().is_none() {
 | 
			
		||||
                    return Err(ParseErrorKind::UnterminatedCodeBlock.at(range.clone()));
 | 
			
		||||
| 
						 | 
				
			
			@ -117,14 +137,14 @@ impl<'a> Parser<'a> {
 | 
			
		|||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                self.eat_until(|c| c == '\n');
 | 
			
		||||
                self.eat_until_line_break();
 | 
			
		||||
                let before_indentation = self.position;
 | 
			
		||||
                let line_indent_level = self.eat_as_long_as(' ');
 | 
			
		||||
                let after_indentation = self.position;
 | 
			
		||||
                if self.current().map(&cond).is_some_and(identity) || self.current().is_none() {
 | 
			
		||||
                    self.position = before_indentation;
 | 
			
		||||
                    break;
 | 
			
		||||
                } else if !matches!(self.current(), Some('\n')) && line_indent_level < indent_level
 | 
			
		||||
                } else if !matches!(self.current(), Some('\n') | Some('\r')) && line_indent_level < indent_level
 | 
			
		||||
                {
 | 
			
		||||
                    return Err(ParseErrorKind::InconsistentIndentation {
 | 
			
		||||
                        got: line_indent_level,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -249,14 +249,14 @@ pub fn regenerate_or_report_error(paths: &Paths<'_>) {
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub async fn web_server() -> anyhow::Result<()> {
 | 
			
		||||
pub async fn web_server(port: u16) -> anyhow::Result<()> {
 | 
			
		||||
    let app = Router::new().nest_service("/", ServeDir::new("target/site"));
 | 
			
		||||
 | 
			
		||||
    #[cfg(debug_assertions)]
 | 
			
		||||
    let app = app.layer(LiveReloadLayer::new());
 | 
			
		||||
 | 
			
		||||
    info!("serving on port 8080");
 | 
			
		||||
    Ok(axum::Server::bind(&([0, 0, 0, 0], 8080).into())
 | 
			
		||||
    info!("serving on port {port}");
 | 
			
		||||
    Ok(axum::Server::bind(&([0, 0, 0, 0], port).into())
 | 
			
		||||
        .serve(app.into_make_service())
 | 
			
		||||
        .await?)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,9 +28,9 @@ pub enum Command {
 | 
			
		|||
 | 
			
		||||
#[derive(Args)]
 | 
			
		||||
pub struct GenerateArgs {
 | 
			
		||||
    /// Start a web server serving the static files. Useful with `cargo watch`.
 | 
			
		||||
    /// Start a web server serving the static files on the given port. Useful with `cargo watch`.
 | 
			
		||||
    #[clap(short, long)]
 | 
			
		||||
    pub serve: bool,
 | 
			
		||||
    pub serve: Option<u16>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Args)]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,8 +35,8 @@ async fn fallible_main() -> anyhow::Result<()> {
 | 
			
		|||
 | 
			
		||||
            regenerate_or_report_error(&paths);
 | 
			
		||||
 | 
			
		||||
            if regenerate_args.serve {
 | 
			
		||||
                generate::web_server().await?;
 | 
			
		||||
            if let Some(port) = regenerate_args.serve {
 | 
			
		||||
                generate::web_server(port).await?;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue