Skip to content

Commit 14282be

Browse files
committedFeb 16, 2019
multiple language overflow and max between info and logo in main for loop #25
1 parent c7e7d58 commit 14282be

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed
 

Diff for: ‎Cargo.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: ‎src/main.rs

+24-8
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use colored::*;
88
use git2::Repository;
99
use license::License;
1010
use std::{
11+
cmp,
1112
collections::HashMap,
1213
convert::From,
1314
ffi::OsStr,
@@ -58,12 +59,17 @@ impl fmt::Display for Info {
5859
if !self.languages.is_empty() {
5960
if self.languages.len() > 1 {
6061
let title = "Languages: ";
62+
let pad = " ".repeat(title.len());
6163
let mut s = String::from("");
64+
let mut cnt = 0;
6265
for language in self.languages.iter() {
63-
let formatted_number = format!("{:.*}", 1, language.1);
64-
s.push_str(
65-
&(language.0.to_string() + " (" + &formatted_number.to_string() + "%) "),
66-
);
66+
let formatted_number = format!("{:.*}", 2, language.1);
67+
if cnt != 0 && cnt % 3 == 0 {
68+
s = s + &format!("\n{}{} ({} %) ", pad, language.0, formatted_number);
69+
} else {
70+
s = s + &format!("{} ({} %) ", language.0, formatted_number);
71+
}
72+
cnt += 1;
6773
}
6874
writeln!(buffer, "{}{}", title.color(color).bold(), s)?;
6975
} else {
@@ -114,11 +120,17 @@ impl fmt::Display for Info {
114120
)?;
115121

116122
let logo = self.get_ascii();
117-
let mut lines = buffer.lines();
123+
let mut logo_lines = logo.lines();
124+
let mut info_lines = buffer.lines();
118125
let left_pad = logo.lines().map(|l| true_len(l)).max().unwrap_or(0);
119126

120-
for logo_line in logo.lines() {
121-
let info_line = match lines.next() {
127+
for _ in 0..cmp::max(count_newlines(logo), count_newlines(&buffer)) {
128+
let logo_line = match logo_lines.next() {
129+
Some(line) => line,
130+
None => "",
131+
};
132+
133+
let info_line = match info_lines.next() {
122134
Some(line) => line,
123135
None => "",
124136
};
@@ -137,6 +149,10 @@ impl fmt::Display for Info {
137149
}
138150
}
139151

152+
fn count_newlines(s: &str) -> usize {
153+
s.as_bytes().iter().filter(|&&c| c == b'\n').count()
154+
}
155+
140156
/// Transforms a string with color format into one with proper
141157
/// escape characters for color display.
142158
///
@@ -323,7 +339,7 @@ fn project_license() -> Result<String> {
323339
.join(", ");
324340

325341
if output == "" {
326-
Ok("Unknown".into())
342+
Ok("??".into())
327343
} else {
328344
Ok(output)
329345
}

0 commit comments

Comments
 (0)