Improve the error message when a TAB character starts a token
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 5eb24b4..c30d7bf 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -6,6 +6,11 @@
<author email="py4fun@gmail.com">Andrey Somov</author>
</properties>
<body>
+ <release version="1.12-SNAPSHOT" date="in Mercurial" description="Maintenance">
+ <action dev="py4fun" type="update">
+ Improve the error message when a TAB character starts a token (2012-11-06)
+ </action>
+ </release>
<release version="1.11" date="2012-09-29" description="Maintenance">
<action dev="py4fun" type="fix" issue="158">
Fix issue 158: improve support for 32-bit characters (UTF-16 surrogate pairs) (2012-09-29)
diff --git a/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java b/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
index b97f778..629dc6d 100644
--- a/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
+++ b/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
@@ -412,8 +412,13 @@
break;
}
}
- throw new ScannerException("while scanning for the next token", null, "found character "
- + ch + "'" + chRepresentation + "' that cannot start any token", reader.getMark());
+ if (ch == '\t')
+ chRepresentation += "(TAB)";
+ String text = String
+ .format("found character %s '%s' that cannot start any token. (Do not use %s for indentation)",
+ ch, chRepresentation, chRepresentation);
+ throw new ScannerException("while scanning for the next token", null, text,
+ reader.getMark());
}
// Simple keys treatment.
diff --git a/src/test/java/org/yaml/snakeyaml/scanner/ScannerImplTest.java b/src/test/java/org/yaml/snakeyaml/scanner/ScannerImplTest.java
index 2c4216d..e0e57fc 100644
--- a/src/test/java/org/yaml/snakeyaml/scanner/ScannerImplTest.java
+++ b/src/test/java/org/yaml/snakeyaml/scanner/ScannerImplTest.java
@@ -61,7 +61,7 @@
fail("TAB cannot start a token.");
} catch (Exception e) {
assertEquals(
- "while scanning for the next token; found character \t'\\t' that cannot start any token; in 'string', line 1, column 1:\n \t data: 1\n ^",
+ "while scanning for the next token; found character \t '\\t(TAB)' that cannot start any token. (Do not use \\t(TAB) for indentation); in 'string', line 1, column 1:\n \t data: 1\n ^",
e.getMessage());
}
}