diff options
author | Kevin Newton <[email protected]> | 2024-03-18 12:20:44 -0400 |
---|---|---|
committer | git <[email protected]> | 2024-03-18 17:00:07 +0000 |
commit | 548203eaf2101d800ac51efd4bb61adbecaef40c (patch) | |
tree | b9128ccaea2c7dac762e477da6db065edbeb2c64 | |
parent | 8514785e946dc14e5acaa74fc127303c805688d4 (diff) |
[ruby/prism] Warn on frozen_string_literal after tokens
https://github.com/ruby/prism/commit/edece87801
-rw-r--r-- | prism/config.yml | 1 | ||||
-rw-r--r-- | prism/prism.c | 6 | ||||
-rw-r--r-- | prism/templates/src/diagnostic.c.erb | 1 |
3 files changed, 6 insertions, 2 deletions
diff --git a/prism/config.yml b/prism/config.yml index 934574b3ea..68b388f2a6 100644 --- a/prism/config.yml +++ b/prism/config.yml @@ -245,6 +245,7 @@ warnings: - DUPLICATED_HASH_KEY - DUPLICATED_WHEN_CLAUSE - FLOAT_OUT_OF_RANGE + - IGNORED_FROZEN_STRING_LITERAL - INTEGER_IN_FLIP_FLOP - INVALID_CHARACTER - INVALID_NUMBERED_REFERENCE diff --git a/prism/prism.c b/prism/prism.c index 38390b5a11..4e55ac9dbe 100644 --- a/prism/prism.c +++ b/prism/prism.c @@ -7391,8 +7391,10 @@ parser_lex_magic_comment(pm_parser_t *parser, bool semantic_token_seen) { // We only want to handle frozen string literal comments if it's before // any semantic tokens have been seen. - if (!semantic_token_seen) { - if (key_length == 21 && pm_strncasecmp(key_source, (const uint8_t *) "frozen_string_literal", 21) == 0) { + if (key_length == 21 && pm_strncasecmp(key_source, (const uint8_t *) "frozen_string_literal", 21) == 0) { + if (semantic_token_seen) { + pm_parser_warn_token(parser, &parser->current, PM_WARN_IGNORED_FROZEN_STRING_LITERAL); + } else { parser_lex_magic_comment_frozen_string_literal_value(parser, value_start, value_end); } } diff --git a/prism/templates/src/diagnostic.c.erb b/prism/templates/src/diagnostic.c.erb index 12e14beb84..1aa261d2c8 100644 --- a/prism/templates/src/diagnostic.c.erb +++ b/prism/templates/src/diagnostic.c.erb @@ -325,6 +325,7 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = { [PM_WARN_EQUAL_IN_CONDITIONAL] = { "found '= literal' in conditional, should be ==", PM_WARNING_LEVEL_DEFAULT }, [PM_WARN_END_IN_METHOD] = { "END in method; use at_exit", PM_WARNING_LEVEL_DEFAULT }, [PM_WARN_FLOAT_OUT_OF_RANGE] = { "Float %.*s%s out of range", PM_WARNING_LEVEL_VERBOSE }, + [PM_WARN_IGNORED_FROZEN_STRING_LITERAL] = { "'frozen_string_literal' is ignored after any tokens", PM_WARNING_LEVEL_VERBOSE }, [PM_WARN_INTEGER_IN_FLIP_FLOP] = { "integer literal in flip-flop", PM_WARNING_LEVEL_DEFAULT }, [PM_WARN_INVALID_CHARACTER] = { "invalid character syntax; use %s%s%s", PM_WARNING_LEVEL_DEFAULT }, [PM_WARN_INVALID_SHAREABLE_CONSTANT_VALUE] = { "invalid value for shareable_constant_value: %.*s", PM_WARNING_LEVEL_VERBOSE }, |