Skip to content

feat: import as (PR3: import x as m)#135

Open
ryuichi1208 wants to merge 4 commits into
feat/from-importfrom
feat/import-as
Open

feat: import as (PR3: import x as m)#135
ryuichi1208 wants to merge 4 commits into
feat/from-importfrom
feat/import-as

Conversation

@ryuichi1208

Copy link
Copy Markdown
Member

概要

Python 風 import の PR3 / 全3 PR(最終)import x as m で別名を付け、m.f() と修飾呼び出しできるようにする。

  • import math_lib as mm.add(...)
  • 別名後は元のモジュール名 math_lib. は無効(Python と同じ)
  • 同じ修飾子名の二重定義を検出

ベースは PR2 (#134)。 マージ順序は PR1 → PR2 → PR3。

設計の要点

  • parser: plain import に [as IDENT] を許し Import.alias を埋めるだけ。
  • sema: PR1/PR2 の _visible_imports(実モジュール名の集合)を import_env: Dict[visible_name, real_module] に置換。import x{x: x}import x as m{m: x}。修飾呼び出し q.f()qimport_env で実モジュールに変換してから解決。
  • irgen は無改変: 解決後は実モジュールの rw_user_<module>_<name> を呼ぶだけ(PR1 の call_resolution 経由)。

これで Python 風 import の 3 形式(import x / from x import y / import x as m)が出揃う。

変更ファイル

レイヤー ファイル 変更
parser rwc/parser.py plain import の as 対応
sema rwc/sema.py _build_import_env、修飾呼び出しの別名解決
examples/tests examples/import_as.rw, tests/* e2e + 単体

Test plan

  • 単体 + e2e = 247 全緑uv run pytest -q、PR2 比 +4)
  • e2e: import_as.rwimport import_basic_lib as mm.add / m.mul)を実行し 5\n20\n
  • emit-ir で m.add()rw_user_import_basic_lib_add に解決されることを確認
  • ネガティブ: 別名後に元モジュール名で修飾 / 二重修飾子 → エラー

Non-Goals

パッケージ階層 / 再エクスポート / 標準ライブラリ(spec 17 のまま据え置き)。

🤖 Generated with Claude Code

ryuichi1208 and others added 4 commits June 22, 2026 15:34
Allow an optional `as IDENT` on plain imports, filling Import.alias.
Sema resolution lands in the next commit.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the visible-imports set with import_env (visible qualifier ->
real module), so `import x as m` makes `m.f()` resolve to module x.
The bare module name is no longer a valid qualifier once aliased.
Detect duplicate qualifiers. irgen is unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
examples/import_as.rw exercises `import x as m` with `m.f()` calls.
Add it to the e2e parametrize list.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
pyproject で宣言済みの dev 依存 (black/ruff/mypy) と
プロジェクトバージョン 0.0.5 を uv.lock に反映する同期コミット。
機能変更なし。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant