dprint_core/formatting/
condition_helpers.rs

1use super::ConditionResolverContext;
2use super::LineAndColumn;
3use super::LineNumber;
4use super::LineStartIndentLevel;
5
6pub fn is_multiple_lines(condition_context: &mut ConditionResolverContext, start_ln: LineNumber, end_ln: LineNumber) -> Option<bool> {
7  let start_ln = condition_context.resolved_line_number(start_ln)?;
8  let end_ln = condition_context.resolved_line_number(end_ln)?;
9
10  Some(end_ln > start_ln)
11}
12
13pub fn is_hanging(condition_context: &mut ConditionResolverContext, start_lsil: LineStartIndentLevel, end_lsil: Option<LineStartIndentLevel>) -> Option<bool> {
14  let start_indent_level = condition_context.resolved_line_start_indent_level(start_lsil)?;
15  let end_indent_level = resolved_end_lsil(condition_context, end_lsil)?;
16  return Some(end_indent_level > start_indent_level);
17
18  fn resolved_end_lsil(condition_context: &mut ConditionResolverContext, end_lsil: Option<LineStartIndentLevel>) -> Option<u8> {
19    if let Some(end_lsil) = end_lsil {
20      condition_context.resolved_line_start_indent_level(end_lsil)
21    } else {
22      // use the current condition position
23      Some(condition_context.writer_info.line_start_indent_level)
24    }
25  }
26}
27
28pub fn are_line_and_columns_not_equal(condition_context: &mut ConditionResolverContext, start_lc: LineAndColumn, end_lc: LineAndColumn) -> Option<bool> {
29  let are_equal = are_line_and_columns_equal(condition_context, start_lc, end_lc)?;
30  Some(!are_equal)
31}
32
33pub fn are_line_and_columns_equal(condition_context: &mut ConditionResolverContext, start_lc: LineAndColumn, end_lc: LineAndColumn) -> Option<bool> {
34  let start_lc = condition_context.resolved_line_and_column(start_lc)?;
35  let end_lc = condition_context.resolved_line_and_column(end_lc)?;
36  Some(start_lc == end_lc)
37}
38
39pub fn is_at_same_position(condition_context: &mut ConditionResolverContext, line_and_col: LineAndColumn) -> Option<bool> {
40  let (start_ln, start_col) = condition_context.resolved_line_and_column(line_and_col)?;
41  Some(start_ln == condition_context.writer_info.line_number && start_col == condition_context.writer_info.column_number)
42}
43
44pub fn is_on_same_line(condition_context: &mut ConditionResolverContext, start_ln: LineNumber) -> Option<bool> {
45  let start_ln = condition_context.resolved_line_number(start_ln)?;
46  Some(start_ln == condition_context.writer_info.line_number)
47}
48
49pub fn is_on_different_line(condition_context: &mut ConditionResolverContext, line_number: LineNumber) -> Option<bool> {
50  let line_number = condition_context.resolved_line_number(line_number)?;
51  Some(line_number != condition_context.writer_info.line_number)
52}