use rewrite::RewriteContext;
use shape::{Indent, Shape};
use string::{rewrite_string, StringFormat};
-use utils::{first_line_width, last_line_width};
+use utils::{count_newlines, first_line_width, last_line_width};
fn is_custom_comment(comment: &str) -> bool {
if !comment.starts_with("//") {
};
Some(format!(
"{}{}{}{}{}",
- prev_str,
- first_sep,
- missing_comment,
- second_sep,
- next_str,
+ prev_str, first_sep, missing_comment, second_sep, next_str,
))
}
config: config,
};
- let line_breaks = orig.trim_right().chars().filter(|&c| c == '\n').count();
+ let line_breaks = count_newlines(orig.trim_right());
let lines = orig.lines()
.enumerate()
.map(|(i, mut line)| {
let mut result = opener.to_owned();
let mut is_prev_line_multi_line = false;
+ let mut inside_code_block = false;
let comment_line_separator = format!("\n{}{}", indent_str, line_start);
for line in lines {
if result == opener {
result.push_str(&comment_line_separator);
}
+ if line.starts_with("```") {
+ inside_code_block = !inside_code_block;
+ }
+ if inside_code_block {
+ if line.is_empty() && result.ends_with(' ') {
+ result.pop();
+ } else {
+ result.push_str(line);
+ }
+ continue;
+ }
+
if config.wrap_comments() && line.len() > fmt.shape.width && !has_url(line) {
match rewrite_string(line, &fmt, Some(max_chars)) {
Some(ref s) => {
buffer
}
-struct CharClasses<T>
+pub struct CharClasses<T>
where
T: Iterator,
T::Item: RichChar,
status: CharClassesStatus,
}
-trait RichChar {
+pub trait RichChar {
fn get_char(&self) -> char;
}
}
}
+impl RichChar for (char, usize) {
+ fn get_char(&self) -> char {
+ self.0
+ }
+}
+
#[derive(PartialEq, Eq, Debug, Clone, Copy)]
enum CharClassesStatus {
Normal,
/// describing opening and closing of comments for ease when chunking
/// code from tagged characters
#[derive(PartialEq, Eq, Debug, Clone, Copy)]
-enum FullCodeCharKind {
+pub enum FullCodeCharKind {
Normal,
/// The first character of a comment, there is only one for a comment (always '/')
StartComment,
}
impl FullCodeCharKind {
- fn is_comment(&self) -> bool {
+ pub fn is_comment(&self) -> bool {
match *self {
FullCodeCharKind::StartComment
| FullCodeCharKind::InComment
}
}
+ pub fn is_string(&self) -> bool {
+ *self == FullCodeCharKind::InString
+ }
+
fn to_codecharkind(&self) -> CodeCharKind {
if self.is_comment() {
CodeCharKind::Comment
T: Iterator,
T::Item: RichChar,
{
- fn new(base: T) -> CharClasses<T> {
+ pub fn new(base: T) -> CharClasses<T> {
CharClasses {
base: base.peekable(),
status: CharClassesStatus::Normal,
context: &RewriteContext,
) -> Option<String> {
let snippet = context.snippet(span);
- if snippet != new && changed_comment_content(&snippet, &new) {
+ if snippet != new && changed_comment_content(snippet, &new) {
// We missed some comments. Keep the original text.
- Some(snippet)
+ Some(snippet.to_owned())
} else {
Some(new)
}