relative include paths now get resolved properly
This commit is contained in:
parent
a567fc75b9
commit
5a3c4bffd6
|
@ -1,6 +1,7 @@
|
||||||
use std::{collections::VecDeque, path::Path};
|
use std::{collections::VecDeque, env, path::Path};
|
||||||
|
|
||||||
use crate::{token::{Token, MessageType}, builtin::modules::Module};
|
use crate::{token::{Token, MessageType}, builtin::modules::Module};
|
||||||
|
use crate::builtin::modules::io::print;
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct LangSpecs {
|
pub struct LangSpecs {
|
||||||
|
@ -58,8 +59,6 @@ pub fn from_list(text: &str) -> Vec<String> {
|
||||||
|
|
||||||
fn parse_directive(text: &str, token_idx: usize, specs: &mut LangSpecs, origin: &String) {
|
fn parse_directive(text: &str, token_idx: usize, specs: &mut LangSpecs, origin: &String) {
|
||||||
|
|
||||||
std::env::set_current_dir(Path::new(origin).parent().unwrap()).expect("unable to change cwd");
|
|
||||||
|
|
||||||
for cap in DIRECTIVE_REGEX.captures_iter(text) {
|
for cap in DIRECTIVE_REGEX.captures_iter(text) {
|
||||||
let mut enumerator = cap.iter().enumerate();
|
let mut enumerator = cap.iter().enumerate();
|
||||||
loop {
|
loop {
|
||||||
|
@ -91,11 +90,19 @@ fn parse_directive(text: &str, token_idx: usize, specs: &mut LangSpecs, origin:
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
4 => {
|
4 => {
|
||||||
|
let cwd = Path::new(origin).parent().unwrap().canonicalize().unwrap();
|
||||||
for path in from_list(mat.as_str()).iter() {
|
for path in from_list(mat.as_str()).iter() {
|
||||||
if let Ok(str) = std::fs::read_to_string(path) {
|
let mut include_path = cwd.clone();
|
||||||
specs.embedded_files.push((token_idx, str, path.to_owned()));
|
include_path.push(path);
|
||||||
} else {
|
|
||||||
crate::message(MessageType::Warning, format!("Unable to read embedded file: {path}"));
|
if let Ok(path) = include_path.canonicalize() {
|
||||||
|
let include_file = path.to_str().unwrap().to_string();
|
||||||
|
|
||||||
|
if let Ok(str) = std::fs::read_to_string(&include_file) {
|
||||||
|
specs.embedded_files.push((token_idx, str, include_file));
|
||||||
|
} else {
|
||||||
|
crate::message(MessageType::Warning, format!("Unable to read embedded file: {include_file}"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -33,7 +33,7 @@ fn compile(settings: &Settings) -> Option<(Vec<Func>, Vec<Declr>, Vec<BuiltinFun
|
||||||
|
|
||||||
let mut diagnostics = Diagnostics::new(&settings);
|
let mut diagnostics = Diagnostics::new(&settings);
|
||||||
diagnostics.add_source_origin(code, src.path());
|
diagnostics.add_source_origin(code, src.path());
|
||||||
|
|
||||||
if let Ok(mut tokens) = tokenize(code, &mut diagnostics) {
|
if let Ok(mut tokens) = tokenize(code, &mut diagnostics) {
|
||||||
let specs = crate::direct::resolve_directives(&mut tokens, src.path());
|
let specs = crate::direct::resolve_directives(&mut tokens, src.path());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue