ActionScript3のIDE
eclipseプラグインでaxdtがあるけれど、imp依存の関係で随分もたついてるようなので、DLTKを使って自作してみようかな。
DLTK
DLTK IDE Guide
ドキュメント不足なeclipseプラグイン開発には珍しく、結構わかりやすく書いてくれてる。
metaas : Java library for manipulating ActionScript source code
パーサとかにつかおう。
Step 1 Skeleton
とりあえずDLTKのガイドを、actionscript用に置き換えて進めて見る。
Step1のFirst Python projectまで順調に進めて、step2へ移動。Python source parser.のところで、PythonSourceParserFactoryのコードサンプルがないことに気付く。
とりあえずAbstractSourceParserを継承して作っておいた。
実行すると、Example通りにScriptExplorerに出てるね。
Step 2 Towards an Editor
インタプリタの環境設定のところはとりあえずすっとばして、調子にのってEditorクラスを作成。しかし…
Google codeで探してみたところ、ここ を参考に。どうやらISourceParserFactoryを実装して、そこからISourceParserを返すようで。
package org.openforce.dltk.actionscript.parser; import org.eclipse.dltk.ast.parser.ISourceParser; import org.eclipse.dltk.ast.parser.ISourceParserFactory; public class ActionScriptSourceParserFactory implements ISourceParserFactory{ @Override public ISourceParser createSourceParser() { return new ActionScriptSourceParser(); } }
package org.openforce.dltk.actionscript.parser; import org.eclipse.dltk.ast.declarations.ModuleDeclaration; import org.eclipse.dltk.ast.parser.AbstractSourceParser; import org.eclipse.dltk.compiler.problem.IProblemReporter; public class ActionScriptSourceParser extends AbstractSourceParser { @Override public ModuleDeclaration parse(char[] fileName, char[] content0, IProblemReporter reporter) {// throws ModuleDeclaration moduleDeclaration = new ModuleDeclaration( content0.length, true); //パース処理をこのあたりに moduleDeclaration.rebuild(); return moduleDeclaration; } }
ここらへんでいよいよmetaasの出番。
とりあえず一日でこんな感じに。
DLTKすごいよ。何故みんなこれを使ってさっさと作らないんだ。
次はコードのカラーリング。Step2を進めていくが、また以下のように…
原因はScriptSourceViewerConfigurationのgetOutlinePresenterControlCreatorが、強制的にnullを返しているのが原因のよう。
Google Codeでまたサンプル探ししてみる。ScriptOutlineInformationControlを継承したクラスを、getOutlinePresenterControlCreatorから返してやればよいらしい。
結構それっぽくなってきた。
Step 3 Towards an IDE
いよいよコード補完とか、本格的な機能の実装。とりあえずこれを実装してやれば、AXDTより使い勝手はよくなると思う。
コードサーチのダイアログは実装できているものの、検索結果が出てこない。と思ったら、Declaratoinsを選択したらちゃんと返ってきた。
Syntax Error
ちょっと寄り道して、Syntax Errorを実装。
IProblemReporterがあからさまに怪しかったので、こいつにIProblemを継承したクラスDefaultProblemとかを渡せばよさそうと気付く。
Open Type
Open Typeをサンプル通りに実装してみたが、検索が実行されない。アイコンはちゃんとでるんだけど…。dltk rubyのコードやらいろいろ覗いて見たけどさっぱりわからず、途方にくれながら、ふとプロジェクトを新規で作ってもう一度検索してみたら、うまく実行された。
多分前のプロジェクトが0.95で作られたものだったのが原因だったようで。
Open declaration feature.
宣言元へのジャンプだけど、これが今までとは違って面倒。正確なものを作るのはやってられないんで、なんとなく使えればいいか程度で。
Code assistance
このあたりになると、完全に力技。DLTK PythonやJavascriptは補完や参照はかなりいい加減。それに対してRubyやPHP(PDT)は凄いよくできてるなぁ。
とりあえず、importとclassのアシストを追加。