Part of the work for a doc handler
This commit is contained in:
parent
693766fa59
commit
f67793308e
@ -1,5 +1,4 @@
|
|||||||
#![feature(trace_macros)]
|
#![feature(trace_macros)]
|
||||||
#![feature(proc_macro)]
|
|
||||||
extern crate proc_macro;
|
extern crate proc_macro;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate quote;
|
extern crate quote;
|
||||||
@ -52,7 +51,7 @@ fn extract_attribute_list(name: &str, attrs: &Vec<Attribute>) -> Option<Vec<(Ide
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
#[proc_macro_derive(ProgrammingLanguageInterface, attributes(LanguageName, SourceFileExtension, PipelineSteps))]
|
#[proc_macro_derive(ProgrammingLanguageInterface, attributes(LanguageName, SourceFileExtension, PipelineSteps, DocMethod))]
|
||||||
pub fn derive_programming_language_interface(input: TokenStream) -> TokenStream {
|
pub fn derive_programming_language_interface(input: TokenStream) -> TokenStream {
|
||||||
let ast: DeriveInput = syn::parse(input).unwrap();
|
let ast: DeriveInput = syn::parse(input).unwrap();
|
||||||
let name = &ast.ident;
|
let name = &ast.ident;
|
||||||
@ -62,6 +61,7 @@ pub fn derive_programming_language_interface(input: TokenStream) -> TokenStream
|
|||||||
let file_ext = extract_attribute_arg_by_name("SourceFileExtension", attrs).expect("SourceFileExtension is required");
|
let file_ext = extract_attribute_arg_by_name("SourceFileExtension", attrs).expect("SourceFileExtension is required");
|
||||||
let passes = extract_attribute_list("PipelineSteps", attrs).expect("PipelineSteps are required");
|
let passes = extract_attribute_list("PipelineSteps", attrs).expect("PipelineSteps are required");
|
||||||
let pass_idents = passes.iter().map(|x| x.0);
|
let pass_idents = passes.iter().map(|x| x.0);
|
||||||
|
let doc_method: Option<String> = extract_attribute_arg_by_name("DocMethod", attrs);
|
||||||
|
|
||||||
//let pass_names: Vec<String> = passes.iter().map(|pass| pass.0.to_string()).collect();
|
//let pass_names: Vec<String> = passes.iter().map(|pass| pass.0.to_string()).collect();
|
||||||
let pass_descriptors = passes.iter().map(|pass| {
|
let pass_descriptors = passes.iter().map(|pass| {
|
||||||
@ -97,6 +97,8 @@ pub fn derive_programming_language_interface(input: TokenStream) -> TokenStream
|
|||||||
//vec![ #(PassDescriptor { name: #pass_names.to_string(), debug_options: vec![] }),* ]
|
//vec![ #(PassDescriptor { name: #pass_names.to_string(), debug_options: vec![] }),* ]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//TODO if doc_method is defined, add code here
|
||||||
};
|
};
|
||||||
|
|
||||||
tokens.into()
|
tokens.into()
|
||||||
}
|
}
|
||||||
|
@ -35,12 +35,18 @@ mod eval;
|
|||||||
#[LanguageName = "Schala"]
|
#[LanguageName = "Schala"]
|
||||||
#[SourceFileExtension = "schala"]
|
#[SourceFileExtension = "schala"]
|
||||||
#[PipelineSteps(tokenizing, parsing(compact,expanded,trace), symbol_table, typechecking, ast_reducing, eval)]
|
#[PipelineSteps(tokenizing, parsing(compact,expanded,trace), symbol_table, typechecking, ast_reducing, eval)]
|
||||||
|
#[DocMethod = "get_doc"]
|
||||||
pub struct Schala {
|
pub struct Schala {
|
||||||
state: eval::State<'static>,
|
state: eval::State<'static>,
|
||||||
symbol_table: Rc<RefCell<symbol_table::SymbolTable>>,
|
symbol_table: Rc<RefCell<symbol_table::SymbolTable>>,
|
||||||
type_context: typechecking::TypeContext<'static>,
|
type_context: typechecking::TypeContext<'static>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Schala {
|
||||||
|
fn get_doc(&self, _commands: &Vec<&str>) -> Option<String> {
|
||||||
|
Some(format!("yup this is getting called right"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Schala {
|
impl Schala {
|
||||||
fn new_blank_env() -> Schala {
|
fn new_blank_env() -> Schala {
|
||||||
|
@ -156,7 +156,7 @@ pub trait ProgrammingLanguageInterface {
|
|||||||
fn custom_interpreter_directives_help(&self) -> String {
|
fn custom_interpreter_directives_help(&self) -> String {
|
||||||
format!(">> No custom interpreter directives specified <<")
|
format!(">> No custom interpreter directives specified <<")
|
||||||
}
|
}
|
||||||
fn get_doc(&mut self, _commands: &Vec<&str>) -> Option<String> {
|
fn get_doc(&self, _commands: &Vec<&str>) -> Option<String> {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user