JScript IntelliSense 用ファイル生成を考える

投稿日 : 2008年11月20日 0:17

 JScript IntelliSense 用ファイルを作る の続き。これって.NETのコードからReflection使って作れそうですよね。

 こんなクラスがあったとして。

Public Class Sample
    Public Shared Function GetString(ByVal i As Integer) As String
    End Function
End Class

 

 ここでは、世の中はSharedなメソッドしかないとします。次のように、Publicな静的メソッドを取り出して、さらにその引数も取り出して、戻り値も取り出して……と、コードを生成します。オーバーロードは考えてません。

 

Dim sb = New System.Text.StringBuilder
Dim t = GetType(Sample)

' Static method
For Each i In t.GetMethods(BindingFlags.Static Or BindingFlags.Public)
    sb.Append(String.Format("{0}.{1} = function({2}) {{" & vbCrLf, _
                            t.Name, _
                            i.Name, _
                            String.Join(", ", (From p In i.GetParameters Select p.Name).ToArray)))
    sb.Append(String.Format("/// <summary></summary>" & vbCrLf))
    For Each p In i.GetParameters
        sb.Append(String.Format("/// <param name=""{0}"" type=""{1}""></param>" & vbCrLf, p.Name, p.ParameterType.JScriptName))
    Next
    If i.ReturnType IsNot GetType(System.Void) Then
        sb.Append(String.Format("/// <returns type=""{0}""></returns>" & vbCrLf, i.ReturnType.JScriptName))
    End If
    sb.Append("}" & vbCrLf & vbCrLf)
Next

Dim js = sb.ToString

 

 JScriptにはIntegerなどはないので、適当な型名変換のメソッドを作ってます。拡張メソッドを使ったりして。JScriptにはない型をparam type属性に書いても、IntelliSenseでその名前が表示されるだけなので必ず変換しないといけないというものではないです。

<Extension()> _
Public Function JScriptName(ByVal t As Type) As String
    Dim numbers As Type() = {GetType(Byte), GetType(Decimal), GetType(Double), GetType(Int32), GetType(Int64), GetType(SByte), GetType(Int16), GetType(Single), GetType(UInt32), GetType(UInt64), GetType(UInt16)}
    If numbers.Contains(t) Then
        Return "Number"
    ElseIf t Is GetType(String) Then
        Return "String"
    ElseIf t Is GetType(Boolean) Then
        Return "Boolean"
    ElseIf t Is GetType(DateTime) Then
        Return "Data"
    Else
        Return t.Name
    End If
End Function

 実行して得られる文字列は、こんな感じ。できました。

Sample.GetString = function(i) {
/// <summary></summary>
/// <param name="i" type="Number"></param>
/// <returns type="String"></returns>
}

 こういうふうにJScript IntelliSense用のコードを生成してくれるライブラリってないんですかね? 実用用途が乏しいからでしょうか。少しさがしてみたところ(いうほどさがしていないけど)、こちら。Silverlight 1.0 Javascript Intellisense は、もう古いけども Silverlight 1.0 向けのIntelliSenseファイル。これは、同じような考えで、DLLファイルからJScriptのコードを生成しているようです。生成されたコードを見てみると、nullや空のfunctionだけでなく、一部コードも生成していますね。IntelliSenseとして利用されるときのテクニックが何かあるのかな。

フィードバック

# TERXItIETgGYmtM

2011/12/27 19:04 by http://www.spytown.com/
I am getting married on the 15th of November. Congratulate me! Then will be here rarely!...

# jWWVgwGmZtGHH

2011/12/29 20:25 by http://www.healthinter.org/health/page/protonix.ph
Sent the first post, but it wasn`t published. I am writing the second. It's me, the African tourist.
コメントの入力
タイトル
名前
Url
コメント