ActionScript3のIDE

eclipseプラグインでaxdtがあるけれど、imp依存の関係で随分もたついてるようなので、DLTKを使って自作してみようかな。

DLTK

DLTK IDE Guide

ドキュメント不足なeclipseプラグイン開発には珍しく、結構わかりやすく書いてくれてる。

Step 1 Skeleton

Step 2 Towards an Editor

Step 3 Towards an IDE

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を進めていくが、また以下のように…

 

 

原因はScriptSourceViewerConfigurationgetOutlinePresenterControlCreatorが、強制的に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のアシストを追加。