كيف ترى الروابط داخل وحدة PowerShell الخاصة بك

يوم جيد ، زملائي. قبل مائة عام ، في مكان ما ، وصفت طريقة سريعة وقذرة لرؤية رسم بياني للمكالمات داخل برنامج PowerShell النصي الخاص بك. حان الوقت الآن ، إذا جاز التعبير ، لسحب بومة على الكرة الأرضية ورؤية الرسم البياني للتبعية داخل الوحدة.


بادئ ذي بدء ، تحتاج إلى تثبيت وحدة PSQuickGraph من معرض Powershell. وبعد ذلك ، قم بتشغيل البرنامج النصي ، والتي يمكن أخذ أساسها هنا . بصراحة ، لم أكن أفهم تمامًا كيفية إدراج الرمز من الجوهر في مشاركة على مركز إذا أخبرني أحدهم في التعليقات ، سأكون ممتنًا جدًا.


لذا ، دعنا نواصل. بادئ ذي بدء ، تحدثت عن الوحدة في قسمين. وهي مبنية على مكتبة QuickGraph . في الأساس ، هذا هو غلاف PowerShell فوق المكتبة ، وهو مصمم للاختبارات السريعة والخشبية مع الرسوم البيانية. يمكن أن يكون أحد هذه الاختبارات شيئًا يوزع رمز PowerShell الخاص بك ، وينشئ رسمًا بيانيًا للارتباط منه ، ويعرضه بشكل مرئي.


بالإضافة إلى ذلك ، يستخدم البرنامج النصي نفسه آلية الوصول PowerShell المضمنة إلى AST الخاص به ، والذي ، في الواقع ، يبسط إلى حد كبير تحليلنا للكود. في النهاية ، من خلال الجمع بين أحدهما والآخر نحصل على رسم بياني.


نتيجة لذلك ، يتكون النص نفسه من جزأين. قطعة من المحلل اللغوي التي تعمل مع AST ، والجزء الذي يربط بين AST والرسم البياني. يتم وصف هذا الجزء في المثال التالي.


#    ( PSQuickGraph) $g = New-Graph -Type BidirectionalGraph #  PS1 ,  AST        $f = dir "C:\Repo\Work\Tools\*.ps1" -Recurse | Find-Function $f.name | % { Add-Vertex -Vertex $_ -Graph $g} #   ,    ,         ,      $f | % { $fName = $_.name $tmpFile = New-TemporaryFile $_.line >> ($tmpFile.fullname) $expr = Find-Expression -Fullname $tmpFile.fullname $expr.name | ? {$_} | ? {$_ -notin "%","where","?","select","out-null","sort","ft","fl","Write-Verbose" } | % { Add-Edge -From $fName -to $_ -Graph $g} } #   Show-GraphLayout -Graph $g #     DOT Export-Graph -Format Graphviz -Graph $g -Path C:\Temp\g.gv 

حسنا ، شيء من هذا القبيل نتيجة لذلك


الوحدة النمطية


بالإضافة إلى ذلك ، يقوم الأمر الأخير بتصدير الرسم البياني إلى تنسيق DOT ، مما يسمح لك بتعذيبه في تطبيق graphviz

Source: https://habr.com/ru/post/ar425225/


All Articles