about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNick Cameron <nrc@ncameron.org>2018-10-15 11:07:58 +1200
committerGitHub <noreply@github.com>2018-10-15 11:07:58 +1200
commit51ddac33c59081bcd4f067633bd37443b69c60d0 (patch)
treeb80fc17ff27df76c8e0540140053d3dfe5b6d7ae
parenta6ef302236dd353bd737d1196d7dc581ffc703a0 (diff)
parente203057db055adc5a5367d35bcd5bd103a3a21e8 (diff)
Merge pull request #3096 from otavio/use-bytecount-count
utils: rewrite `count_newlines` using `bytecount::count`
-rw-r--r--Cargo.lock7
-rw-r--r--Cargo.toml1
-rw-r--r--src/lib.rs1
-rw-r--r--src/utils.rs6
4 files changed, 13 insertions, 2 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 1df841605cf..be908dac466 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -64,6 +64,11 @@ version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
+name = "bytecount"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
 name = "byteorder"
 version = "1.2.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -593,6 +598,7 @@ version = "0.99.5"
 dependencies = [
  "assert_cli 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytecount 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "cargo_metadata 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "derive-new 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "diff 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -842,6 +848,7 @@ dependencies = [
 "checksum backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a"
 "checksum backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)" = "c66d56ac8dabd07f6aacdaf633f4b8262f5b3601a810a0dcddffd5c22c69daa0"
 "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
+"checksum bytecount 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f861d9ce359f56dbcb6e0c2a1cb84e52ad732cadb57b806adeb3c7668caccbd8"
 "checksum byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "90492c5858dd7d2e78691cfb89f90d273a2800fc11d98f60786e5d87e2f83781"
 "checksum cargo_metadata 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2d6809b327f87369e6f3651efd2c5a96c49847a3ed2559477ecba79014751ee1"
 "checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16"
diff --git a/Cargo.toml b/Cargo.toml
index b6b69509046..e42b25a2191 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -51,6 +51,7 @@ rustc-ap-rustc_target = "272.0.0"
 rustc-ap-syntax = "272.0.0"
 rustc-ap-syntax_pos = "272.0.0"
 failure = "0.1.1"
+bytecount = { version = "0.3", features = ["simd-accel"] }
 
 [dev-dependencies]
 assert_cli = "0.6"
diff --git a/src/lib.rs b/src/lib.rs
index 267096d9943..772ed8cb141 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -17,6 +17,7 @@
 #[macro_use]
 extern crate derive_new;
 extern crate atty;
+extern crate bytecount;
 extern crate diff;
 extern crate failure;
 extern crate itertools;
diff --git a/src/utils.rs b/src/utils.rs
index 63b238a7817..7ef9254a482 100644
--- a/src/utils.rs
+++ b/src/utils.rs
@@ -10,6 +10,8 @@
 
 use std::borrow::Cow;
 
+use bytecount;
+
 use rustc_target::spec::abi;
 use syntax::ast::{
     self, Attribute, CrateSugar, MetaItem, MetaItemKind, NestedMetaItem, NestedMetaItemKind, Path,
@@ -305,8 +307,8 @@ pub fn stmt_expr(stmt: &ast::Stmt) -> Option<&ast::Expr> {
 
 #[inline]
 pub fn count_newlines(input: &str) -> usize {
-    // Using `as_bytes` to omit UTF-8 decoding
-    input.as_bytes().iter().filter(|&&c| c == b'\n').count()
+    // Using bytes to omit UTF-8 decoding
+    bytecount::count(input.as_bytes(), b'\n')
 }
 
 // For format_missing and last_pos, need to use the source callsite (if applicable).