2017-01-24 8 views
2

基本的に構造体、クラス、プロトコル(機能によってDC、DB、DM)にプレフィックスを適用するswiftlintルールがあります。これをトップレベルのオブジェクトにのみ一致させたいと考えています。以下の例では、私はエラーをスローするだけTopLevelSecondTopLevelが欲しい:(struct|class|protocol)\s(?!(func|DB|DC|DM))[^\n\r]+\{、これはTopLevelNotTopLevelの両方に一致しますswiftlintのトップレベルオブジェクトのみの照合方法

class TopLevel { 

    struct NotTopLevel { 
     var test 
    } 

} 

class SecondTopLevel { 

} 

我々の現在の正規表現は次のようです。私はどういうわけか、NotTopLevelと一致しないように正規表現(またはその他の最善のツール)を与えたいと思いますが、まだTopLevelSecondTopLevelと一致するようにしてください。これは可能ですか?どのようにこれを行うための任意のアイデア?

私が擬似しようとしてきたアプローチは、プレフィックスをチェックする前に0以上の以前のクラス定義を探すことですが、チェックする前にクラス全体を1回以上マッチさせようとしている接頭辞。

+0

インデントが常に一貫していると想定できますか? – Faibbus

+0

インデントを使用して宣言のレベルを見つけることができない場合は、正規表現だけでこれを行う方法はありません。どのような正規表現を思いついても、それを壊す宣言が常に存在します。 – Faibbus

答えて

2

あなたはそうあなたが最初のstructクラスやプロトコルに一致する

(struct|class|protocol).* 

を使用することができます。

関連する問題