ruby-changes:58558
From: Nobuyoshi <ko1@a...>
Date: Mon, 4 Nov 2019 21:45:32 +0900 (JST)
Subject: [ruby-changes:58558] ba35c14325 (master): Warn `if` and `elsif` at EOL [EXPERIMENTAL]
https://git.ruby-lang.org/ruby.git/commit/?id=ba35c14325 From ba35c14325ebbf1da8f200df83c45ee9937ff8a1 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada <nobu@r...> Date: Mon, 4 Nov 2019 21:23:11 +0900 Subject: Warn `if` and `elsif` at EOL [EXPERIMENTAL] It is unnatural and probably a typo. diff --git a/parse.y b/parse.y index e1fe38e..8fd2b05 100644 --- a/parse.y +++ b/parse.y @@ -395,6 +395,12 @@ set_line_body(NODE *body, int line) https://github.com/ruby/ruby/blob/trunk/parse.y#L395 #define yyparse ruby_yyparse +#define WARN_EOL(tok) \ + (looking_at_eol_p(p) ? \ + rb_warning0("`" tok "' at the end of line without an expression") : \ + (void)0) +static int looking_at_eol_p(struct parser_params *p); + static NODE* cond(struct parser_params *p, NODE *node, const YYLTYPE *loc); static NODE* method_cond(struct parser_params *p, NODE *node, const YYLTYPE *loc); #define new_nil(loc) NEW_NIL(loc) @@ -3070,6 +3076,7 @@ k_begin : keyword_begin https://github.com/ruby/ruby/blob/trunk/parse.y#L3076 k_if : keyword_if { + WARN_EOL("if"); token_info_push(p, "if", &@$); if (p->token_info && p->token_info->nonspc && p->token_info->next && !strcmp(p->token_info->next->token, "else")) { @@ -3179,6 +3186,7 @@ k_else : keyword_else https://github.com/ruby/ruby/blob/trunk/parse.y#L3186 k_elsif : keyword_elsif { + WARN_EOL("elisif"); token_info_warn(p, "elsif", p->token_info, 1, &@$); } ; @@ -6272,6 +6280,20 @@ pushback(struct parser_params *p, int c) https://github.com/ruby/ruby/blob/trunk/parse.y#L6280 #define tok(p) (p)->tokenbuf #define toklen(p) (p)->tokidx +static int +looking_at_eol_p(struct parser_params *p) +{ + int c; + while ((c = nextc(p)) != -1) { + int eol = (c == '\n' || c == '#'); + if (eol || !ISSPACE(c)) { + pushback(p, c); + return eol; + } + } + return TRUE; +} + static char* newtok(struct parser_params *p) { -- cgit v0.10.2 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/