Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RFC: Support go to definition by Declaration Map #262

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions designs/0004-support-go-to-definition-by-declaration-map.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
- Feature Name: Support go to definition by Declaration Map
- Start Date: 2024-06-01
- RFC PR: [#0](https://github.com/mizdra/happy-css-modules/pull/0)

# Summary

"Go to definition" をサポートするための戦略を提案する RFC です。

# Motivation

CSS Modules は、CSS をモジュール化して構成するための仕組みです。スタイルは `.module.css` に記述され、`.js` から `.module.css` をインポートして利用します。

しかし、`.js` と `.module.css` は異なる言語で記述されているため、エディタの言語機能を利用することが難しいです。例えば、`.js` 内の `styles.foo` から、"Go to definition" を用いて、`.module.css` へとジャンプできません。

そこで、この RFC では、CSS Modules で "Go to definition" をサポートするための戦略を提案します。

# Detailed design

"Go to definition" をサポートするには、いくつかの方法が考えられます。

1. エディタ拡張機能を利用する
- e.g.: VS Code extension, Vim plugin, Emacs plugin
2. [TypeScript Language Service Plugin](https://github.com/microsoft/TypeScript/wiki/Writing-a-Language-Service-Plugin) を利用する
- この技術を用いると、Language Server の挙動をカスタマイズできます
3. [Declaration Map](https://www.typescriptlang.org/tsconfig/#declarationMap) を利用する

1 は最もシンプルな解決方法ですが、エディタごとに拡張機能を用意する必要があります。また、エディタ拡張機能の開発は、エディタごとに異なるため、開発コストが高くなります。

## Compatibility with PostCSS/Sass/Less

# Drawbacks

# Alternatives

## TypeScript Language Service Plugin

TypeScript Language Service Plugin を用いると、Declaration Map と同じように Go to definition をサポートできます。

# Prior art

# Unresolved questions

# Future possibilities