Struct doomdooz_lib::source::File
source · pub struct File<'a> {
pub parser_result: ParserResult,
/* private fields */
}Fields§
§parser_result: ParserResultImplementations§
source§impl<'a> File<'a>
impl<'a> File<'a>
pub fn inline(source: String, active_cops: &'a HashSet<&str>) -> File<'a>
pub fn new(filepath: String, active_cops: &'a HashSet<&str>) -> File<'a>
sourcepub fn is_enabled(&self, cop_name: &'static str) -> bool
pub fn is_enabled(&self, cop_name: &'static str) -> bool
Examples found in repository?
src/source.rs (line 63)
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
pub fn process(&self) {
let ast = self.parser_result.ast.as_ref();
if let Some(ast) = ast {
self.iterate_nodes(&*ast);
for (cop_name, handler) in TOKENS_HANLDERS.lock().unwrap().iter() {
if self.is_enabled(cop_name) {
handler(&self.parser_result.tokens, self);
}
}
}
}
fn iterate_nodes(&self, node: &types::Node) {
let call_handlers = |node_type| {
if let Some(handlers) = NODE_HANDLERS.lock().unwrap().get(node_type) {
for (cop_name, handler) in handlers {
if self.is_enabled(cop_name) {
handler(node, self);
}
}
}
};
call_handlers(node.str_type());
// TODO: implement all types
match node {
types::Node::Begin(n) => {
for statement in &n.statements {
self.iterate_nodes(&statement);
}
}
types::Node::Module(n) => {
if let Some(body) = &n.body {
self.iterate_nodes(&body);
}
}
types::Node::Class(n) => {
if let Some(body) = &n.body {
self.iterate_nodes(&body);
}
}
types::Node::Block(n) => {
if let Some(body) = &n.body {
self.iterate_nodes(&body);
}
}
types::Node::Lvasgn(n) => {
if let Some(body) = &n.value {
self.iterate_nodes(&body);
}
}
types::Node::Send(n) => {
call_handlers(&("send_".to_owned() + &n.method_name));
}
_ => (),
}
}pub fn process(&self)
sourcepub fn add_offense<T: AsRef<str> + Display>(
&self,
cop_name: &'static str,
range: Loc,
message: T
)
pub fn add_offense<T: AsRef<str> + Display>(
&self,
cop_name: &'static str,
range: Loc,
message: T
)
Examples found in repository?
More examples
src/cop/style/alias.rs (line 21)
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
pub fn on_alias(node: &types::Node, file: &source::File) {
if CONFIG.get_string(COP_NAME, "EnforcedStyle") == "prefer_alias_method" {
if let types::Node::Alias(node) = node {
file.add_offense(COP_NAME, node.expression_l, MSG_ALIAS_METHOD);
}
}
}
pub fn on_alias_method(node: &types::Node, file: &source::File) {
if CONFIG.get_string(COP_NAME, "EnforcedStyle") == "prefer_alias" {
if let types::Node::Send(node) = node {
file.add_offense(COP_NAME, node.expression_l, MSG_ALIAS);
}
}
}Additional examples can be found in:
- src/cop/layout/space_before_semicolon.rs
- src/cop/layout/space_before_comma.rs
- src/cop/style/and_or.rs
- src/cop/style/symbol_literal.rs
- src/cop/style/array_join.rs
- src/cop/naming/accessor_method_name.rs
- src/cop/style/empty_method.rs
- src/cop/naming/binary_operator_parameter_name.rs
- src/cop/lint/duplicate_hash_key.rs
- src/cop/bundler/duplicated_gem.rs