Commit 573f120a authored by Roman Alifanov's avatar Roman Alifanov

Add env.VAR = value syntax for setting environment variables

- env.VAR = value generates export VAR="value" - Supports interpolation: env.GREETING = "Hello, {name}!" - Add 2 tests for env.set functionality - Update all documentation files
parent 25773938
......@@ -964,7 +964,7 @@ arg = args.get (0)
### env (переменные окружения)
```
# Доступ к переменным окружения
# Чтение переменных окружения
home = env.HOME
user = env.USER
path = env.PATH
......@@ -976,9 +976,17 @@ debug: bool = env.DEBUG
# Арифметика с числовыми env
uid: int = env.UID
next_uid = uid + 1
# Установка переменных окружения
env.MY_VAR = "value"
env.PORT = 8080
# С интерполяцией
name = "world"
env.GREETING = "Hello, {name}!"
```
Генерирует `${VAR}` напрямую — без fork.
Чтение генерирует `${VAR}`, установка — `export VAR="value"`. Без fork.
### shell (выполнение команд)
......
......@@ -276,7 +276,7 @@ try {
| **Random** | `random()`, `random_range()` |
| **Args** | `args.count/get` |
| **Logger** | `logger.info/warn/error/debug` |
| **Env** | `env.HOME`, `env.USER`, `env.VAR` — environment variables |
| **Env** | `env.VAR` read, `env.VAR = value` set — environment variables |
## CLI Commands
......
......@@ -276,7 +276,7 @@ try {
| **Случайные числа** | `random()`, `random_range()` |
| **Аргументы** | `args.count/get` |
| **Логгер** | `logger.info/warn/error/debug` |
| **Окружение** | `env.HOME`, `env.USER`, `env.VAR` — переменные окружения |
| **Окружение** | `env.VAR` чтение, `env.VAR = value` установка — переменные окружения |
## Команды CLI
......
......@@ -168,6 +168,11 @@ class DispatchMixin:
if isinstance(stmt.target.object, ThisExpr):
self._generate_this_field_assignment(stmt)
return
if isinstance(stmt.target.object, Identifier) and stmt.target.object.name == "env":
var_name = stmt.target.member
value = self.generate_expr(stmt.value)
self.emit(f'export {var_name}="{value}"')
return
target = self.generate_lvalue(stmt.target)
......
......@@ -630,6 +630,23 @@ print (doubled)
assert code == 0
assert int(stdout.strip()) > 0
def test_env_set(self):
code, stdout, _ = run_ct('''
env.MY_TEST_VAR = "hello"
print (env.MY_TEST_VAR)
''')
assert code == 0
assert "hello" in stdout
def test_env_set_with_interpolation(self):
code, stdout, _ = run_ct('''
name = "world"
env.GREETING = "Hello, {name}!"
print (env.GREETING)
''')
assert code == 0
assert "Hello, world!" in stdout
class TestJson:
def test_json_parse(self):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment