diff --git a/sandbox/darren/just_a_box.css b/sandbox/darren/just_a_box.css index 881e436bf..3a09b9c02 100644 --- a/sandbox/darren/just_a_box.css +++ b/sandbox/darren/just_a_box.css @@ -4,7 +4,7 @@ Screen { #left_pane { background: red; - width: 20; + width: 20 overflow: scroll scroll; } diff --git a/src/textual/css/tokenizer.py b/src/textual/css/tokenizer.py index d2e0f34cc..cf090866c 100644 --- a/src/textual/css/tokenizer.py +++ b/src/textual/css/tokenizer.py @@ -12,6 +12,7 @@ import rich.repr from rich.syntax import Syntax from rich.text import Text +from ._error_tools import friendly_list from .._loop import loop_last @@ -203,11 +204,13 @@ class Tokenizer: line = self.lines[line_no] match = expect.match(line, col_no) if match is None: + expected = friendly_list(" ".join(name.split("_")) for name in expect.names) + message = f"Expected one of {expected}.; Did you forget a semicolon at the end of a line?" raise TokenError( self.path, self.code, (line_no, col_no), - "expected " + ", ".join(name.upper() for name in expect.names), + message, ) iter_groups = iter(match.groups()) next(iter_groups)