[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]