Allow usage of tab symbols for indents and separators in Ninja files

Closes #10752.

PiperOrigin-RevId: 294427345
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/lexer/NinjaLexer.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/lexer/NinjaLexer.java
index 5fbfa4b..b2812a2 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/lexer/NinjaLexer.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/lexer/NinjaLexer.java
@@ -82,15 +82,13 @@
       byte b = step.startByte();
       switch (b) {
         case ' ':
+        case '\t':
           step.skipSpaces();
           if (step.getPosition() == 0
               || NinjaToken.NEWLINE.equals(Iterables.getLast(tokens, null))) {
             return push(NinjaToken.INDENT);
           }
           break;
-        case '\t':
-          step.forceError("Tabs are not allowed, use spaces.");
-          return push(NinjaToken.ERROR);
         case '\r':
           expectedTextKind = TextKind.IDENTIFIER;
           step.processLineFeedNewLine();
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/lexer/NinjaLexerStep.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/lexer/NinjaLexerStep.java
index 41fefb1..6635378 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/lexer/NinjaLexerStep.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/lexer/NinjaLexerStep.java
@@ -141,7 +141,7 @@
   }
 
   public void skipSpaces() {
-    end = eatSequence(position, aByte -> ' ' != aByte);
+    end = eatSequence(position, aByte -> ' ' != aByte && '\t' != aByte);
   }
 
   public void skipComment() {
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaLexerTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaLexerTest.java
index 88a50a1..94787c3 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaLexerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaLexerTest.java
@@ -68,13 +68,17 @@
   }
 
   @Test
-  public void testDisallowedSymbols() {
+  public void testTabsAreAllowed() {
     String text = "abc\n\tcde";
     NinjaLexer lexer = createLexer(text);
     assertTokenBytes(lexer, NinjaToken.IDENTIFIER, "abc");
     assertTokenBytes(lexer, NinjaToken.NEWLINE, null);
-    assertError(lexer, "Tabs are not allowed, use spaces.", "\t");
+    assertTokenBytes(lexer, NinjaToken.INDENT, null);
+    assertTokenBytes(lexer, NinjaToken.IDENTIFIER, "cde");
+  }
 
+  @Test
+  public void testDisallowedSymbols() {
     assertError(createLexer("^"), "Symbol is not allowed in the identifier.", "^");
   }