diff --git a/lib/ace/mode/ruby_highlight_rules.js b/lib/ace/mode/ruby_highlight_rules.js index 2d980bb1..8de4d903 100644 --- a/lib/ace/mode/ruby_highlight_rules.js +++ b/lib/ace/mode/ruby_highlight_rules.js @@ -131,7 +131,7 @@ var RubyHighlightRules = function() { regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float - regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" + regex : "[+-]?\\d(?:\\d|_(?=\\d))*(?:(?:\\.\\d(?:\\d|_(?=\\d))*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language.boolean", regex : "(?:true|false)\\b" diff --git a/lib/ace/mode/ruby_tokenizer_test.js b/lib/ace/mode/ruby_tokenizer_test.js index 9127b954..37f4e2a3 100644 --- a/lib/ace/mode/ruby_tokenizer_test.js +++ b/lib/ace/mode/ruby_tokenizer_test.js @@ -59,6 +59,13 @@ module.exports = { assertInvalidTokens(this.tokenizer, "string", [":", ":@", ":$", ":1", ":1thing", ":th?ing", ":thi=ng", ":1thing", ":th!ing", ":thing#"]); + }, + + "test: float tokenizer" : function() { + assertValidTokens(this.tokenizer, "constant.numeric", + ["1", "+1", "-1", "12_345", "0.000_1"]); + assertInvalidTokens(this.tokenizer, "constant.numeric", + ["_", "_1", "1_", "1_.0", "0._1"]); } };