aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/viml/parser/expressions.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/viml/parser/expressions.c')
-rw-r--r--src/nvim/viml/parser/expressions.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/nvim/viml/parser/expressions.c b/src/nvim/viml/parser/expressions.c
index 6c7c328b6d..63ad6bab35 100644
--- a/src/nvim/viml/parser/expressions.c
+++ b/src/nvim/viml/parser/expressions.c
@@ -47,6 +47,8 @@
// type of what is in the first expression is generally not known when
// parsing, so to have separate expressions like this separate them with
// spaces.
+// 7. 'isident' no longer applies to environment variables, they always include
+// ASCII alphanumeric characters and underscore and nothing except this.
#include <stdbool.h>
#include <stddef.h>
@@ -383,10 +385,14 @@ LexExprToken viml_pexpr_next_token(ParserState *const pstate, const int flags)
break;
}
+#define ISWORD_OR_AUTOLOAD(x) \
+ (ASCII_ISALNUM(x) || (x) == AUTOLOAD_CHAR || (x) == '_')
+#define ISWORD(x) \
+ (ASCII_ISALNUM(x) || (x) == '_')
+
// Environment variable.
case '$': {
- // FIXME: Parser function can’t be thread-safe with vim_isIDc.
- CHARREG(kExprLexEnv, vim_isIDc);
+ CHARREG(kExprLexEnv, ISWORD);
break;
}
@@ -400,10 +406,6 @@ LexExprToken viml_pexpr_next_token(ParserState *const pstate, const int flags)
case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U':
case 'V': case 'W': case 'X': case 'Y': case 'Z':
case '_': {
-#define ISWORD_OR_AUTOLOAD(x) \
- (ASCII_ISALNUM(x) || (x) == AUTOLOAD_CHAR || (x) == '_')
-#define ISWORD(x) \
- (ASCII_ISALNUM(x) || (x) == '_')
ret.data.var.scope = 0;
ret.data.var.autoload = false;
CHARREG(kExprLexPlainIdentifier, ISWORD);
@@ -441,9 +443,10 @@ LexExprToken viml_pexpr_next_token(ParserState *const pstate, const int flags)
CHARREG(kExprLexPlainIdentifier, ISWORD_OR_AUTOLOAD);
}
break;
-#undef ISWORD_OR_AUTOLOAD
-#undef ISWORD
}
+
+#undef ISWORD
+#undef ISWORD_OR_AUTOLOAD
#undef CHARREG
// Option.