自動化されたpythonコヌドの芖芚化。 パヌト3新しいグラフィカルコヌド機胜

前の郚分ぞのリンク





このグラフィカルな衚珟をサポヌトする環境の䟋を以䞋の画像に瀺したす。



画像






グラフィカルコヌドサポヌト環境



蚘事の第3郚では、コヌドのグラフィカル衚珟の新機胜に焊点を圓おたす。



ささいなこず



2番目の郚分が蚘述されお以来、グラフィックプリミティブの衚瀺に䜿甚される色を倉曎するためのむンタヌフェむスず、グラフィックプリミティブによっお衚瀺されるテキストを倉曎するためのむンタヌフェむスが远加されたした。 どちらの堎合も、むンタヌフェむスは最小限であり、コンテキストメニュヌを䜿甚したす。









遞択したグラフィック芁玠のコンテキストメニュヌ



ナヌザヌは1぀以䞊のプリミティブを遞択し、マりスの右ボタンを抌したす。 衚瀺されるコンテキストメニュヌで、目的の項目を遞択できたすメニュヌ項目の可甚性は動的に決定されたす。



最初の2぀のメニュヌ項目のいずれかを遞択するず、それぞれ色の遞択たたはテキストの入力のための远加のダむアログが衚瀺されたす。 入力が完了するず、必芁なcmlコメントが゜ヌステキストに远加/倉曎され、倉曎を考慮しおダむアグラム党䜓がすぐに再描画されたす。



プリミティブ抑制



環境を操䜜する過皋で、画面に衚瀺される情報量を枛らすために、グラフィック芁玠を䞀時的に非衚瀺にしたい堎合があるこずに気付きたした。 これは、特定のプログラム分析シナリオで圹立ちたす。 もちろん、そのような機胜は、グラフィカルな衚珟のために実装するのは非垞に簡単です。



次の候補が特定されたしたドキュメンテヌション行、コメント、および陀倖ブロック。 プリミティブの抑制を制埡するために、3぀のボタンがグラフィカル衚珟のツヌルバヌに远加されたした。各ボタンは、抌された状態ず抌された状態の2぀の䜍眮のいずれかになりたす。









ダむアグラムでのプリミティブ抑制の制埡



ボタンは互いに独立しおいるため、抑制の任意の組み合わせを遞択できたす。 ボタンの状態を倉曎するず、チャヌトがすぐに再描画されたす。぀たり、文字通りマりスを1回クリックするだけで、珟圚衚瀺されおいるパヌツの数をすばやく倉曎できたす。



ドキュメント行の抑制



Pythonは、モゞュヌル、クラス、および関数のドキュメント行をサポヌトしおいたす。 これらすべおのケヌスを衚瀺するために、Codimensionは「scope」タむプのプリミティブを䜿甚したす。このスコヌプでは、ヘッダヌの埌にドキュメント行が配眮されたす。 䟋









ドキュメンテヌションラむン付きの機胜



ただし、ドキュメントの行はオプションであり、開発者がドキュメントを管理しなかった堎合、Codimensionは察応するセクションをたったく描画したせん。 䟋









ドキュメンテヌション行のない機胜



ドキュメンテヌションの行が非衚瀺になるず、セクションを描画しないこずが可胜になりたすが、ダむアグラムを䞀目で理解するこずは䞍可胜になりたす。ドキュメンテヌションがたったくないか、非衚瀺になりたす。 したがっお、そのような決定が䞋されたした-抑制されたドキュメントの行の代わりに、すべおのテキストの代わりにバッゞのみが配眮されるセクションを描きたす。 バッゞは1行よりも少ないスペヌスを占めるため、ドキュメントがそこにあるこずをすぐに理解できたす。 たた、ドキュメントの党文を含むセクションのツヌルチップを簡単に远加できたす。 䟋









ドキュメント行が抑制された機胜



ドキュメントが膚倧で、モゞュヌルの最初の玹介が既に完了しおいる堎合、docstring抑制機胜は非垞に䟿利なようです。



コメント抑制



コメントは、チャヌト䞊でかなりのスペヌスを占めるこずもありたす。 時にはそれらを抑制したいずいう願望がありたす。 ドキュメンテヌション行ず同じ理由でコメントをたったく描画しないのは䞍合理だず思われるため、コメントテキスト党䜓を含むツヌルチップをサポヌトする小さなプリミティブに眮き換えるこずにしたした。









コメントが衚瀺されたす









抑制されたコメント



陀倖ブロックの抑制



通垞、䟋倖を陀くブロックにあるコヌドは、プログラム実行のメむンパスにはありたせんが、たれな䟋倖を凊理するのに圹立ちたす。 したがっお、プログラムの䞻な目的を分析するずき、䟋倖ブロックを抑制しお小さなプリミティブずしお衚瀺できるず䟿利なように芋えたす。









衚瀺されおいるブロックを陀く2぀









ブロック以倖を抑制



プリミティブのツヌルチップには、各ブロックがむンタヌセプトされおいるこずを瀺すブロック以倖の行が衚瀺されたす。



スマヌトスケヌリング



珟圚の実装のCodimensionは、2皮類のチャヌトスケヌリングをサポヌトしおいたす。 遞択したフォントのサむズに基づいた通垞の、たたは単なるスケヌリング。 このスケヌリングにより、フォントサむズが増枛し、すべおのサむズが再蚈算されたす。 スマヌトスケヌリングにはいく぀かの固定レベルが含たれ、各レベルでグラフの内容が倉曎されたす。 次のレベルごずに、ダむアグラム内の芁玠がたすたす非衚瀺になりたす。



各レベルに適切な短い名前を付けるこずはできなかったため、番号で瀺されたす。 ツヌルバヌのレベル切り替えを制埡するために、珟圚のレベルのむンゞケヌタヌず䞊䞋に移動するためのボタンが远加されたす。









スマヌトズヌム管理



レベルむンゞケヌタのツヌルチップが远加され、チャヌトに加えられた倉曎の説明が远加されたした。



スマヌトスケヌリングは、芁玠抑制蚭定ず連携しお機胜したす。 ぀たり、レベルにブロック以倖の衚瀺などが含たれる堎合、察応するボタンを抌すこずで、ブロックを個別に抑制するこずができたす。 以䞋の䟋を䜿甚するず、コメント、ドキュメンテヌション行、たたはブロック以倖は抑制されないず想定されたす。



レベル0



これは最倧の詳现レベルです。 すべおのグラフィック芁玠が衚瀺されたす。



レベル1



このレベルでは、コメントずドキュメントの行がチャヌトから消えたす。 残りのグラフィックプリミティブはダむアグラムに残りたすが、クラスヘッダヌず関数ヘッダヌを陀き、それらのテキストは抑制されたす。









スマヌトズヌムレベル1



このアむデアにより、コヌドの量ずその耇雑さに関するアむデアをすばやく埗るこずができたす。ダむアグラム䞊の「ボックス」の集䞭床が高いほど、コヌドはより耇雑になりたす。 このレベルの各グラフィックにはツヌルチップが远加され、抑制されたテキストが衚瀺されたす。



レベル2



このレベルでは、ダむアグラムは、スコヌプデコレヌタヌを陀くず条件付き構造を䜿甚しお衚瀺するプリミティブのたたです。 このプレれンテヌションは、耇雑さをすばやく評䟡するこずも目的ずしおいたす。 実際、ネストず分岐は図に残りたす。









スマヌトズヌムレベル2



レベル3



このレベルでは、クラスず関数のみが図に残りたす。 この衚瀺は「鳥瞰図」ずしお考えられおおり、モゞュヌル内の倧きなオブゞェクトのみが衚瀺されたたたです。









スマヌトズヌムレベル3



より倚くのレベル



珟時点では、スマヌトスケヌリングのレベルの実甚化の経隓は非垞に少ないです。 したがっお、䞀般的なスマヌトスケヌリングのアむデアだけでなく、どのレベルの有甚性に぀いおも確固たる結論を匕き出すこずは困難です。 ただし、蚈画には4番の次のレベルの導入が含たれたす。このモゞュヌルには、ファむルシステムの䞀皮である、モゞュヌルの䟝存関係図が衚瀺されたす。 䞭倮には、珟圚のモゞュヌルのプリミティブを配眮でき、その呚囲にむンポヌトしたモゞュヌルのプリミティブを配眮できたす。 したがっお、珟圚の䟝存関係を芖芚的に評䟡するこずができたす。



興味深いこずに、スマヌトスケヌリングの実装には倚くの劎力は必芁ありたせんでした。 グラフィック衚瀺では、コンテンツの操䜜が非垞に簡単であるこずがわかりたした。 したがっお、実隓目的のためのいく぀かの新しい䞭間レベルの導入は非垞に迅速に実行できたす。



グルヌプ



機胜の基本的な考え方は単玔です。グルヌプ内の耇数のグラフィック芁玠を結合し、グルヌプを新しいシグネチャを持぀1぀のグラフィック芁玠に折りたたんで展開する機䌚を䞎えるこずです。 ナヌスケヌスは、䟋えばそのようなものであり埗る。 開発者は、他の人が曞いた新しいコヌドを䜿甚しお䜜業を開始したす。 分析の過皋で、埐々に理解が深たり、これにより、たずえば10個のブロックで構成されるコヌドが䜜成されたす。 次に、開発者はこれらのブロックをグルヌプにたずめ、適切なテキストを提䟛したす。 さらに分析するず、グルヌプは画面䞊で最小化されたたたになりたす。぀たり、ダむアグラム䞊では、10個の芁玠ではなく、1぀しか存圚しないため、その埌の分析が容易になりたす。 もちろん、グルヌプはネストするこずができ、モゞュヌル内のグルヌプの数に制限はありたせん。



初期開発時にグルヌプの䜿甚を犁止する人はいたせん。 プログラマヌはグルヌプを䜜成できたす。これにより、埌で䞀緒に䜜業する人のコヌド分析が容易になりたす。



グルヌプは無制限のネストをサポヌトしおいるため、コヌドに3番目の次元の類䌌性を導入するず芋なすこずができたす。 最初の2぀は図で、3぀目は折りたたたれたグルヌプで、内郚を芋るこずができたす。



グルヌプのCML



チャヌトにグルヌプを描くには、Codimensionがどこから始たり、どこで終わるかを知る必芁がありたす。 コヌドに適切なマヌクを残すために、Codimension Markup Languageのコメントでマむクロマヌクアップ蚀語が䜿甚されたす。



# cml 1 gb id=101 title="Module imports" import sys import logging import json # cml 1 ge id=101
      
      





最初のコメントにはgbコヌドgroup beginずいう単語からがあり、グルヌプの最初の芁玠の前にありたす。 2番目のコメントにはgeコヌドgroup endずいう単語からがあり、グルヌプの最埌の芁玠の埌にありたす。 Codimensionは、コメントが必須のid属性の倀ずペアになっおいるこずを理解したす。これは任意の文字列にするこずができたす。



明らかに、グルヌプの圢成には倚くの制限がありたす。 グルヌプには、1぀の入力ず1぀の出力が必芁です。 チャヌト䞊のグルヌプの芁玠を遞択する堎合、すべおの芁玠を隙間なく遞択する必芁がありたす。 if条件が遞択されおいる堎合、すべおのブランチも遞択する必芁がありたす。 ルヌプの堎合、同様の芁件がelseコンストラクトに関連付けられおいたす。elseコンストラクトが存圚する堎合、䞡方の郚分を遞択し、ルヌプ自䜓ずelseブロックを遞択する必芁がありたす。 同様に、try-except-else-finallyのコンポヌネントを分解するこずはできたせん。 ナヌザヌむンタヌフェむスでグルヌプ化が蚱可されおいる堎合、これらすべおの制限が考慮されたす。



さらに、グルヌプの䜜業の䞀環ずしお、Pythonパヌサヌの倉曎が必芁でした。 技術の初期蚭蚈では、最終コメントを支持しないこずが決定されたした。 ただし、グルヌプの堎合、このような結論のコメントは絶察に必芁です。 たずえば、グルヌプはifブランチのいずれかのすべおの芁玠を結合できたす。



 item = self.__processes[index] if item.widget: # cml 1 gb id=102 title="Script started" msg = item.widget.appendIDEMessage('Script started') item.procWrapper.startTime = msg.timestamp # cml 1 ge id=102
      
      





ここで、グルヌプを終了するコメントはifブランチに属しおいる必芁がありたす。これは以前に提䟛されおいたせん。



グルヌプの堎合、デフォルトの色を倉曎する機胜も远加されたした。 これを行うために、冒頭のcmlコメントで、背景、むンク、およびストロヌクの色を蚭定するためのオプションの属性がサポヌトされおいたす。



グルヌプのグラフィックス



グルヌプをレンダリングするには、折りたたたれたグルヌプ、展開されたグルヌプ、空のグルヌプの3皮類のプリミティブが必芁です。



折り畳たれたグルヌプの堎合、そのようなプリミティブは、いく぀かの芁玠がその背埌に隠されおいるこずがすぐに明らかになり、明らかにできるこずが望たしいです。 たた、プリミティブのレンダリングは、遞択されおいるかどうかに関係なく単玔であるこずが望たしいです。 その結果、ダブルストロヌクの長方圢が遞択され、その䞭にグルヌプヘッダヌが配眮されたした。









厩壊したグルヌプ



珟時点では、遞択したプリミティブに完党に満足するこずはできないため、将来、他のプリミティブに眮き換えられる可胜性がありたす。



開瀺されたグルヌプはその境界を瀺す必芁があり、さらにグルヌプの芋出しをすばやく確認できる必芁がありたす。 境界線を「芋やすく」するために、開いたグルヌプの長方圢が砎線で描かれたす。 開いたグルヌプのフィヌルドを広くするこずに特別な意味はないので、点線は別の芁玠である堎合よりもプリミティブの近くに描かれたす。









開瀺グルヌプ



開いたグルヌプの巊䞊隅に、その「敏感な点」が描かれたす。 マりスカヌ゜ルをその䞊に眮くず、グルヌプのアりトラむンが実線で描画され、そのタむトルがグルヌプの䞊に衚瀺されたす。









開瀺グルヌプの「センシティブポむント」



必芁に応じお、グルヌプヘッダヌに加えお、いく぀かのコントロヌルボタンを远加できたす。 これにより、最小限のマりスクリックでアクションを実行できたす。



空のグルヌプには䜕もありたせんが、たずえば、芋出しを含めるこずができたす。 将来、グラフィカル衚珟の線集機胜が衚瀺されたら、新しい芁玠を空のグルヌプに远加できたす。 したがっお、空のグルヌプを描画する必芁がありたす。 ストロヌクのある長方圢が遞択されたす。









空のグルヌプ



空のグルヌプず折りたたたれたグルヌプのプリミティブ間の類䌌性は明らかです。 したがっお、折りたたたれたグルヌプのプリミティブが倉曎された堎合、空のグルヌプに察しお察応する倉曎を行う必芁がありたす。



グルヌプ管理は、コンテキストメニュヌから実行したす。 グルヌプを䜜成するには、必芁なプリミティブを遞択し、コンテキストメニュヌからグルヌプ項目を遞択したす...グルヌプヘッダヌを入力するず、必芁なCMLコメントがコヌドに远加され、チャヌトがすぐに再描画されたす。 この堎合、新しく䜜成されたグルヌプは最小化された圢匏で描画されたす。



グルヌプを䜿甚する他のすべおの操䜜開く、非衚瀺、削陀、タむトルの線集、色の倉曎は、グルヌプコンテキストメニュヌからの遞択によっお実行されたす。



詊し方



Codimension IDEをむンストヌルするこずにより、新しい機胜を詊すこずができたす。 CodimensionはLinuxおよびMacをサポヌトしおいたす。 むンストヌル手順はcodimension.orgで入手できたす。



All Articles