ご存知の方もいらっしゃると思いますが、私は自分のIDEを開発しています。あなたは「ああ、もう一つ?!」と思うかもしれません。-心配しないでください。誰もあなたにそれを使用するように強制することはありません。とにかく真剣に公開されるとは思えません。
それでは、メインの問題に進みます。オートコンプリートシステムを実装しようとしています。正確なUIは問題ではありません。ただし、言語/ライブラリトークンを柔軟に保存することが私の主な問題です。
CSSセレクターまたは属性をユーザーに提案しているとしましょう。次のようなものがあります。
- css/core
- a // anchor tag
- etc // all valid html tags
- .stuff // class name parsed from user project
- ?etc // more stuff parsed from user project (ids, classes...)
- css/properties
- border // regular css properties - we also need to associate
// <border-style> and <color> value tokens
- etc // the rest of them
- css/values/border-style // property value tokens
- solid
- dotted
- css/values/color
- red
- green
- fucshia
したがって、各トークンは名前空間を取得するため、トークン間を追跡できます。BNFと同様に、一部のトークン値は、境界線や色の場合などのサブトークンで構成されています。
1.エキゾチックな構文の言語に関連する可能性のあるものをすべて保存する必要があることを忘れないでください。2.また、上記の情報を、プロジェクトのファイルから収集されたクラス名のリストなど、コンテキストに依存する情報と何らかの方法でマージする必要があることに注意することが重要です。これは、重複トークンなどを発生させることなく、高速かつ効率的である必要があります。
したがって、結論として、ここでのことは非常に複雑であり、一般的で柔軟なソリューションを取得する方法を正直に考えることはできません。IDEはあらゆる種類の言語に対応する必要があるため、これはさらに複雑になることに注意してください。
この質問が、たとえばプログラマーに適しているかどうかはわかりません。そのため、modに任せて決定します。