Index: .divinerconfig
===================================================================
--- .divinerconfig
+++ .divinerconfig
@@ -20,4 +20,3 @@
     ["DivinerXHPEngine", {}]
   ]
 }
-
Index: bin/arc.bat
===================================================================
--- bin/arc.bat
+++ bin/arc.bat
@@ -1,3 +1,2 @@
 @echo off
 php -f "%~dp0..\scripts\arcanist.php" -- %*
-
Index: scripts/arcanist.php
===================================================================
--- scripts/arcanist.php
+++ scripts/arcanist.php
@@ -624,4 +624,3 @@
 
   exit($err);
 }
-
Index: src/lint/linter/ArcanistLicenseLinter.php
===================================================================
--- src/lint/linter/ArcanistLicenseLinter.php
+++ src/lint/linter/ArcanistLicenseLinter.php
@@ -57,5 +57,3 @@
     }
   }
 }
-
-
Index: src/lint/linter/ArcanistTextLinter.php
===================================================================
--- src/lint/linter/ArcanistTextLinter.php
+++ src/lint/linter/ArcanistTextLinter.php
@@ -14,6 +14,8 @@
   const LINT_BAD_CHARSET            = 5;
   const LINT_TRAILING_WHITESPACE    = 6;
   const LINT_NO_COMMIT              = 7;
+  const LINT_BOF_WHITESPACE         = 8;
+  const LINT_EOF_WHITESPACE         = 9;
 
   private $maxLineLength = 80;
 
@@ -38,6 +40,8 @@
     return array(
       self::LINT_LINE_WRAP => ArcanistLintSeverity::SEVERITY_WARNING,
       self::LINT_TRAILING_WHITESPACE => ArcanistLintSeverity::SEVERITY_AUTOFIX,
+      self::LINT_BOF_WHITESPACE => ArcanistLintSeverity::SEVERITY_AUTOFIX,
+      self::LINT_EOF_WHITESPACE => ArcanistLintSeverity::SEVERITY_AUTOFIX,
     );
   }
 
@@ -50,6 +54,8 @@
       self::LINT_BAD_CHARSET          => pht('Bad Charset'),
       self::LINT_TRAILING_WHITESPACE  => pht('Trailing Whitespace'),
       self::LINT_NO_COMMIT            => pht('Explicit %s', '@no'.'commit'),
+      self::LINT_BOF_WHITESPACE       => pht('Leading Whitespace at BOF'),
+      self::LINT_EOF_WHITESPACE       => pht('Trailing Whitespace at EOF'),
     );
   }
 
@@ -77,6 +83,9 @@
     $this->lintEOFNewline($path);
     $this->lintTrailingWhitespace($path);
 
+    $this->lintBOFWhitespace($path);
+    $this->lintEOFWhitespace($path);
+
     if ($this->getEngine()->getCommitHookMode()) {
       $this->lintNoCommit($path);
     }
@@ -194,6 +203,54 @@
     }
   }
 
+  protected function lintBOFWhitespace($path) {
+    $data = $this->getData($path);
+
+    $matches = null;
+    $preg = preg_match(
+      '/^\s*\n/',
+      $data,
+      $matches,
+      PREG_OFFSET_CAPTURE);
+
+    if (!$preg) {
+      return;
+    }
+
+    list($string, $offset) = $matches[0];
+    $this->raiseLintAtOffset(
+      $offset,
+      self::LINT_BOF_WHITESPACE,
+      'This file contains leading whitespace at the beginning of the file. ' .
+      'This is unnecessary and should be avoided when possible.',
+      $string,
+      '');
+  }
+
+  protected function lintEOFWhitespace($path) {
+    $data = $this->getData($path);
+
+    $matches = null;
+    $preg = preg_match(
+      '/(?<=\n)\s+$/',
+      $data,
+      $matches,
+      PREG_OFFSET_CAPTURE);
+
+    if (!$preg) {
+      return;
+    }
+
+    list($string, $offset) = $matches[0];
+    $this->raiseLintAtOffset(
+      $offset,
+      self::LINT_EOF_WHITESPACE,
+      'This file contains trailing whitespace at the end of the file. This ' .
+      'is unnecessary and should be avoided when possible.',
+      $string,
+      '');
+  }
+
   private function lintNoCommit($path) {
     $data = $this->getData($path);
 
@@ -210,5 +267,4 @@
     }
   }
 
-
 }
Index: src/lint/linter/__tests__/text/bof-whitespace-1.lint-test
===================================================================
--- /dev/null
+++ src/lint/linter/__tests__/text/bof-whitespace-1.lint-test
@@ -0,0 +1,9 @@
+
+
+
+
+The quick brown fox jumps over the lazy dog.
+~~~~~~~~~~
+autofix:1:1
+~~~~~~~~~~
+The quick brown fox jumps over the lazy dog.
Index: src/lint/linter/__tests__/text/bof-whitespace-2.lint-test
===================================================================
--- /dev/null
+++ src/lint/linter/__tests__/text/bof-whitespace-2.lint-test
@@ -0,0 +1,2 @@
+   The quick brown fox jumps over the lazy dog.
+~~~~~~~~~~
Index: src/lint/linter/__tests__/text/eof-whitespace.lint-test
===================================================================
--- /dev/null
+++ src/lint/linter/__tests__/text/eof-whitespace.lint-test
@@ -0,0 +1,9 @@
+The quick brown fox jumps over the lazy dog.
+
+
+
+
+~~~~~~~~~~
+autofix:2:1
+~~~~~~~~~~
+The quick brown fox jumps over the lazy dog.
Index: src/unit/engine/CSharpToolsTestEngine.php
===================================================================
--- src/unit/engine/CSharpToolsTestEngine.php
+++ src/unit/engine/CSharpToolsTestEngine.php
@@ -284,5 +284,3 @@
     return $reports;
   }
 }
-
-
Index: src/workflow/ArcanistBackoutWorkflow.php
===================================================================
--- src/workflow/ArcanistBackoutWorkflow.php
+++ src/workflow/ArcanistBackoutWorkflow.php
@@ -181,4 +181,3 @@
 
   }
 }
-
Index: src/workflow/ArcanistRevertWorkflow.php
===================================================================
--- src/workflow/ArcanistRevertWorkflow.php
+++ src/workflow/ArcanistRevertWorkflow.php
@@ -35,4 +35,3 @@
     $console->writeOut("Please use arc backout instead.\n");
   }
 }
-