Question [Module] PSAnalysis

Plus d'informations
il y a 7 ans 5 mois #20144 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:[Module] PSAnalysis
Richard Lazaro écrit:

même si j'ai codé avant au final

ça m'arrive aussi :P
Le principal est qu'ils existent.
Richard Lazaro écrit:

et l'intégration continue.

Sur les projets Psionic et Convert-Form j'ai créé de nombreux scripts pour cela(répertoire \Tools), c'est plus des contrôles via PSake avant la livraison et la création de la livraison.
Il y en existe un autour de PS et TFS, mais est surdimensionné pour mes besoins et en clientèle ce ne pas certains de trouver ce produit, ni les compétences nécessaires.
Il existe peut être appveyor pour Github , mais je n'ai pas creusé plus que ça.
Richard Lazaro écrit:

D'ailleurs en parlant de cela, c'est bizarre car TeamCity propose bien d'exécuter un powershell en version : 2.0, 3.0 ou 4.0

J'ai regardé rapido , je doute qu'il propose le side by side, il semble s'appuyer sur la version du serveur d'IC.
Richard Lazaro écrit:

J'espère avoir répondu a tes questions ^^

Oui merci je comprends mieux ce que tu veux faire, je regarderai ton code prochainement.

{edit]
Correction de coquille<br><br>Message édité par: Laurent Dardenne, à: 27/06/15 14:08

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 5 mois #20208 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:[Module] PSAnalysis
Un truc en passant, en lisant ta réponse dans ce post ( sur le test entre une chaine et un type), il y a une possible dépendance sur les fichiers de type xml (ETS), par exemple si je redéclare la méthode Tostring().
Je me demandais si tu comptais lister ces dépendances avec ton outil ?

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 5 mois #20212 par Richard Lazaro
Réponse de Richard Lazaro sur le sujet Re:[Module] PSAnalysis
Actuellement non, pour toi cela serait une information interessante à remonter ?
Aprés, j'ai un peu du mal à voir comment implémenter ce contrôle.

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 5 mois #20223 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:[Module] PSAnalysis
Richard Lazaro écrit:

Actuellement non, pour toi cela serait une information intéressante à remonter ?

C'est une dépendance. Pour la cartographie d'un code à reprendre oui c'est intéressant à connaitre.
Ensuite si le schémas d'installation de module est respecté, il y a souvent un répertoire dédié, dans ce cas le recensement est facilité.

Cela dépend également de la manière de regarder le code, ici l'usage serait : \&quot;J'ai du code (scripts/module/prg externe) je veux construire un setup, donne moi la liste des fichiers à livrer.\&quot;
Je sais ce n'est pas ton objectif, mais si tu veux savoir de quoi est constitué la solution que tu analyses c'est nécessaire.
De plus, si le client ne respecte les règles de déploiement, tu peux avoir des fichiers de la solution dans le répertoire de PS !
Combien de clients perdent les livrables...

Richard Lazaro écrit:

Aprés, j'ai un peu du mal à voir comment implémenter ce contrôle.

[code:1]
Get-TypeData #requiert PS V3
$Td=Get-TypeData 'System.Diagnostics.Process
$td
$td.members
[/code:1]
Ou cette fonction .
Ensuite de savoir quel fichier utilise quel type, ce n'est peut être pas nécessaire ou ardu/impossible avec l'AST courant, car on ne connait pas le type d'une variable comme en C#.
Par exemple dans le cas cité, on peut ne pas savoir que la ligne du test peut dépendre d'un fichier de type.

On peut rechercher les appels de ce cmdlet et autres méthodes de chargement, un peu comme ici .
Justement l'AST v4 facilite cette recherche :
[code:1]
$sb = {
Import-LocalizedData foo en-us -FileName foofile
Import-LocalizedData -UICulture en-us -FileName barfile -BindingVariable bar
}

$ImportLocalizedDataCommands = $sb.Ast.FindAll({
[System.Management.Automation.Language.Ast]$ast = $args[0]
($ast -is [System.Management.Automation.Language.CommandAst]) -and
($ast.GetCommandName() -eq 'Import-LocalizedData')
}, $true)


$ImportLocalizedDataCommands | % {
$binding = [System.Management.Automation.Language.StaticParameterBinder]::BindCommand($_)

[pscustomobject]@{
BindingVariable = $binding.BoundParameters.ConstantValue
Filename = $binding.BoundParameters.ConstantValue
}
}
[/code:1]
Là c'est Jason Shirk qui m'a donné l'info sur la mailing list MVP, pas besoin de reverse dans ce cas ;-)
La classe StaticParameterBinder permet de retrouver facilement la valeur d'un paramètre selon la ligne d'appel.

Le seul truc pénible, à mon avis, est que le token Dot n'est pas différencié :
Dot The instance member access or dot source invocation operator '.'. Introduced in Windows PowerShell 3.0.
Ce qui oblige à déterminer le contexte.

Pour te faciliter la tâche, je pense que tu peux contraindre ton outil sur la V4, qui serait dédié à un poste d'analyse et pas lié à la production.
A moins que tu veuilles offrir cette possibilité :-)<br><br>Message édité par: Laurent Dardenne, à: 23/06/15 17:08

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 5 mois #20243 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:[Module] PSAnalysis
Quelques remarques rapido.

Testé avec :
[code:1]
C:\Temp\PSAnalysis-master&gt; Start-Analysis .\PSAnalysis.psm1
[/code:1]
Peut être un copié/collé de trop dans les constructeurs de la classe Token :
[code:1]
this.Type = TokenType.Unknown;
this.Type = type;
[/code:1]
Il existe déjà un classe Token , à terme ce sera peut être gênant de ne pas savoir laquelle on manipule.

Certaines propriétés de cette classe sont en R/W :
StartLineNbrn, EndLineNbrn, StartColumnNbr

Pour moi, l'ajout de Nbr n'apporte rien, je sais que je manipule des lignes de texte d'un code source, et le type Int renforce cette info. Mais MS ne semble pas cohérent sur ce point cf. PSToken et IScriptExtent.

Le type d'un token semble être incorrectement déterminé, pour cette ligne ( et d'autres) :
[code:1]
New-Variable -Name InstanciedCommand -Option AllScope -Value (Get-Command -All | Select-Object -ExpandProperty Name)
[/code:1]
on obtient :
[code:1]
Type : Function
Name : New-Variable
StartLineNbr : 63
EndLineNbr : 63
StartColumnNbr : 1
EndColumnNbr : 117
Childs : {Select-Object, Get-Command}
[/code:1]
Du coup je me demande ce qu'est Childs, une dépendance 'Parent/Enfant' (arbre) ou une dépendance 'Utilise/Utilisé par' (graphe) ?

'Get-Command -All' peut renvoyer des doublons ou plus, avec une origine différente. Et cette commande dépend de la config du poste,cf. $PSModuleAutoLoadingPreference.

Enfin pour Get-Tokenization, de prime abord je me demande pourquoi ne pas utiliser des visiteurs au lieu d'un switch?
Le type d'un token devrait être en R/O il me semble et l'ajout d'un constructeur recevant un $ObjAST.Extent réduirait la saisie.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 5 mois #20246 par Richard Lazaro
Réponse de Richard Lazaro sur le sujet Re:[Module] PSAnalysis
Merci Laurent, c'est cool d'avoir un retour comme ça. Surtout de toi qui commence a avoir l'habitude de créer des projets comme cela, moi j'étais plus sur du mode pompier tout le temps ^^

Laurent Dardenne écrit:

Il existe déjà un classe Token , à terme ce sera peut être gênant de ne pas savoir laquelle on manipule.


Je vois exactement ce que tu veux dire, mais je ne trouve pas d'autre mot pour remplacer Token, ou sinon peut être le prefixé avec le prefix du module ?

Laurent Dardenne écrit:

Certaines propriétés de cette classe sont en R/W


Il est vrai que ormis les Childs, les autres props n'ont pas besoin d'être en R/W

Laurent Dardenne écrit:

Le type d'un token semble être incorrectement déterminé, pour cette ligne


Bon ben le debug va commencer par cela :)

Laurent Dardenne écrit:

Du coup je me demande ce qu'est Childs, une dépendance 'Parent/Enfant' (arbre) ou une dépendance 'Utilise/Utilisé par' (graphe) ?


La propriété Childs affiche les dépendances 'Parent/Enfant' et de cela (et en fonction du functionDefinition/Function) je peux déterminer le graphe


Laurent Dardenne écrit:

'Get-Command -All' peut renvoyer des doublons ou plus, avec une origine différente. Et cette commande dépend de la config du poste,cf. $PSModuleAutoLoadingPreference.


C'est un de mes Todo, je pense remplacer le 'Get-Command -all' par une exécution d'un nouveau process powershell avec le -NoProfile et la variable de preference positionné sur none.

Laurent Dardenne écrit:

Enfin pour Get-Tokenization, de prime abord je me demande pourquoi ne pas utiliser des visiteurs au lieu d'un switch?


Alors là, je veux bien que tu me parles un peu plus des visiteurs, c'est une notion que je ne connais pas :)

Merci encore.

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.081 secondes
Propulsé par Kunena