Skip to content

Commit

Permalink
refactor: add field only for parse
Browse files Browse the repository at this point in the history
  • Loading branch information
phodal committed Jan 13, 2022
1 parent f70f594 commit b99bfa8
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 20 deletions.
5 changes: 3 additions & 2 deletions src/bin/modeling.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,14 +89,15 @@ fn output_all_in_one(opts: Opts, parse_option: &ParseOption, filter: FileFilter)
}

fn output_file(opts: &Opts, classes: &Vec<ClassInfo>, name: &str) {
let parse_option = opts.to_parse_option();
match opts.output_type.as_str() {
"mermaid" => {
let uml = MermaidRender::render(&classes);
let uml = MermaidRender::render(&classes, &parse_option);
let file_name = format!("{}.mermaid", name);
let _ = fs::write(file_name, uml);
}
&_ => {
let uml = PlantUmlRender::render(&classes);
let uml = PlantUmlRender::render(&classes, &parse_option);
let file_name = format!("{}.puml", name);
let _ = fs::write(file_name, uml);
}
Expand Down
19 changes: 11 additions & 8 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ pub mod parse_option;
///
/// use modeling::file_filter::FileFilter;
/// let classes = by_dir("src/",FileFilter::default(), &ParseOption::default());
/// let puml = PlantUmlRender::render(&classes);
/// let puml = PlantUmlRender::render(&classes, &ParseOption::default());
/// ```
pub fn by_dir<P: AsRef<Path>>(path: P, filter: FileFilter, option: &ParseOption) -> Vec<ClassInfo> {
let origin_files = files_from_path(path, filter);
Expand All @@ -59,7 +59,7 @@ pub fn by_dir<P: AsRef<Path>>(path: P, filter: FileFilter, option: &ParseOption)
/// let mut files = vec![];
/// files.push("src/lib.rs".to_string());
/// let classes = by_files(files, &ParseOption::default());
/// let puml = PlantUmlRender::render(&classes);
/// let puml = PlantUmlRender::render(&classes, &ParseOption::default());
/// ```
pub fn by_files(files: Vec<String>, option: &ParseOption) -> Vec<ClassInfo> {
let thread = count_thread(&files);
Expand Down Expand Up @@ -149,10 +149,11 @@ mod tests {
#[test]
fn should_run_struct_analysis() {
let path = format!("{}", ctags_fixtures_dir().display());
let vec = by_dir(path, FileFilter::default(), &ParseOption::default());
let option = ParseOption::default();
let vec = by_dir(path, FileFilter::default(), &option);

assert_eq!(3, vec.len());
let result = PlantUmlRender::render(&vec);
let result = PlantUmlRender::render(&vec, &option);

let _ = fs::write("demo.puml", result.clone());
assert!(result.contains("class Animal"));
Expand All @@ -171,10 +172,11 @@ mod tests {

let suffixes = vec!["store".to_string()];

let vec = by_dir(path, FileFilter::new(vec![], suffixes), &ParseOption::default());
let option = ParseOption::default();
let vec = by_dir(path, FileFilter::new(vec![], suffixes), &option);

assert_eq!(3, vec.len());
let result = PlantUmlRender::render(&vec);
let result = PlantUmlRender::render(&vec, &option);

let _ = fs::write("demo.puml", result.clone());
assert!(!result.contains("class Animal"));
Expand All @@ -184,10 +186,11 @@ mod tests {
#[test]
fn should_render_mermaid() {
let path = format!("{}", ctags_fixtures_dir().display());
let vec = by_dir(path, FileFilter::default(), &ParseOption::default());
let option = ParseOption::default();
let vec = by_dir(path, FileFilter::default(), &option);

assert_eq!(3, vec.len());
let result = MermaidRender::render(&vec, );
let result = MermaidRender::render(&vec, &option);

println!("{:?}", result);

Expand Down
8 changes: 6 additions & 2 deletions src/render/mermaid_render.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
use crate::coco_struct::ClassInfo;
use std::collections::HashMap;
use crate::ParseOption;
use crate::render::{render_member, render_method};

/// Render classes info to string
pub struct MermaidRender;

impl MermaidRender {
pub fn render(classes: &Vec<ClassInfo>) -> String {
pub fn render(classes: &Vec<ClassInfo>, parse_option: &ParseOption) -> String {
let space = " ";
let mut rendered: Vec<String> = vec![];
let mut deps: Vec<String> = vec![];
Expand All @@ -20,7 +21,10 @@ impl MermaidRender {
let mut dep_map: HashMap<String, String> = HashMap::default();

let members = render_member(&clazz, &mut dep_map, space);
let methods = render_method(&clazz, &mut dep_map, space);
let mut methods = vec![];
if !parse_option.field_only {
methods = render_method(&clazz, &mut dep_map, space);
}

let content = format!("{}{}", members.join(""), methods.join(""));
let class_field = clazz.name.clone();
Expand Down
13 changes: 7 additions & 6 deletions src/render/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,13 @@ pub fn render_member(clazz: &&ClassInfo, dep_map: &mut HashMap<String, String>,
#[cfg(test)]
mod tests {
use crate::coco_struct::{ClassInfo, MemberInfo, MethodInfo};
use crate::ParseOption;
use crate::render::PlantUmlRender;

#[test]
fn should_render_empty() {
let classes = vec![];
let str = PlantUmlRender::render(&classes);
let str = PlantUmlRender::render(&classes, &ParseOption::default());
assert_eq!("@startuml\n\n\n\n@enduml", str);
}

Expand All @@ -68,7 +69,7 @@ mod tests {
let demo = ClassInfo::new("Demo");
classes.push(demo);

let str = PlantUmlRender::render(&classes);
let str = PlantUmlRender::render(&classes, &ParseOption::default());
assert_eq!("@startuml\n\nclass Demo {\n}\n\n@enduml", str);
}

Expand All @@ -85,7 +86,7 @@ mod tests {

classes.push(demo);

let str = PlantUmlRender::render(&classes);
let str = PlantUmlRender::render(&classes, &ParseOption::default());
assert_eq!(
"@startuml\n\nclass Demo {\n - String demo\n - Demo method()\n}\n\n@enduml",
str
Expand All @@ -107,7 +108,7 @@ mod tests {
classes.push(demo);
classes.push(demo2);

let str = PlantUmlRender::render(&classes);
let str = PlantUmlRender::render(&classes, &ParseOption::default());
assert_eq!(true, str.contains("Demo -- Demo2"));
assert_eq!(false, str.contains("Demo -- String"));
}
Expand All @@ -123,7 +124,7 @@ mod tests {
classes.push(demo);
classes.push(demo2);

let str = PlantUmlRender::render(&classes);
let str = PlantUmlRender::render(&classes, &ParseOption::default());
println!("{}", str);
assert!(str.contains("Demo2 <|-- Demo"));
}
Expand All @@ -141,7 +142,7 @@ mod tests {
classes.push(demo);
classes.push(demo2);

let str = PlantUmlRender::render(&classes);
let str = PlantUmlRender::render(&classes, &ParseOption::default());
assert_eq!(true, str.contains("Demo -- Demo2"));
assert_eq!(false, str.contains("Demo -- String"));
}
Expand Down
8 changes: 6 additions & 2 deletions src/render/plantuml_render.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
use std::collections::HashMap;

use crate::coco_struct::ClassInfo;
use crate::ParseOption;
use crate::render::{render_member, render_method};

/// Render classes info to string
pub struct PlantUmlRender;

impl PlantUmlRender {
pub fn render(classes: &Vec<ClassInfo>) -> String {
pub fn render(classes: &Vec<ClassInfo>, parse_option: &ParseOption) -> String {
let mut rendered: Vec<String> = vec![];
let mut deps: Vec<String> = vec![];

Expand All @@ -20,7 +21,10 @@ impl PlantUmlRender {
let mut dep_map: HashMap<String, String> = HashMap::default();

let members = render_member(&clazz, &mut dep_map, "");
let methods = render_method(&clazz, &mut dep_map, "");
let mut methods= vec![];
if !parse_option.field_only {
methods = render_method(&clazz, &mut dep_map, "");
}

let content = format!("{}{}", members.join(""), methods.join(""));
let class_field = clazz.name.clone();
Expand Down

0 comments on commit b99bfa8

Please sign in to comment.