ottomatt - ExtensionMethod 1.3.1

Creation of ps1xml file dedicated to the extension methods contained in an assembly

PM> Install-Package ExtensionMethod -Version 1.3.1 -Source https://www.myget.org/F/ottomatt/api/v3/index.json

Copy to clipboard

> nuget.exe install ExtensionMethod -Version 1.3.1 -Source https://www.myget.org/F/ottomatt/api/v3/index.json

Copy to clipboard

> dotnet add package ExtensionMethod --version 1.3.1 --source https://www.myget.org/F/ottomatt/api/v3/index.json

Copy to clipboard
<PackageReference Include="ExtensionMethod" Version="1.3.1" />
Copy to clipboard
source https://www.myget.org/F/ottomatt/api/v3/index.json

nuget ExtensionMethod  ~> 1.3.1
Copy to clipboard

> choco install ExtensionMethod --version 1.3.1 --source https://www.myget.org/F/ottomatt/api/v2

Copy to clipboard
Import-Module PowerShellGet
Register-PSRepository -Name "ottomatt" -SourceLocation "https://www.myget.org/F/ottomatt/api/v2"
Install-Module -Name "ExtensionMethod" -RequiredVersion "1.3.1" -Repository "ottomatt" 
Copy to clipboard

ExtensionMethod

Creation of ps1xml file dedicated to the extension methods contained in an assembly. From an idea of Bart De Smet's

To install this module :


$PSGalleryPublishUri = 'https://www.myget.org/F/ottomatt/api/v2/package'
$PSGallerySourceUri = 'https://www.myget.org/F/ottomatt/api/v2'

Register-PSRepository -Name OttoMatt -SourceLocation $PSGallerySourceUri -PublishLocation $PSGalleryPublishUri #-InstallationPolicy Trusted
Install-Module ExtensionMethod -Repository OttoMatt

Note : this module depends on the UncommonSense.PowerShell.TypeData module, available on PSGallery.

This code return all types containing extension methods :

 [psobject].Assembly.ExportedTypes|Find-ExtensionMethod -ExcludeGeneric|%  {$_.ToString()}

#System.Management.Automation.Language.TokenFlags GetTraits(System.Management.Automation.Language.TokenKind)
#Boolean HasTrait(System.Management.Automation.Language.TokenKind, System.Management.Automation.Language.TokenFlags)
#System.String Text(System.Management.Automation.Language.TokenKind)

By default Powershell can not use them, but with ETS it is possible to make extension methods available.

The goal is to adapt each method :

<?xml version="1.0" encoding="utf-8"?>
<Types>
  <Type>
    <Name>System.Management.Automation.Language.TokenKind</Name>
    <Members>
      <ScriptMethod>
         <Name>HasTrait</Name>
       <Script>
         switch ($args.Count) {
            1 { [System.Management.Automation.Language.TokenTraits]::HasTrait($this,$args[0])}

            default { throw "No overload for 'HasTrait' takes the specified number of parameters ($($args.Count))." }
         }</Script>
      </ScriptMethod>
      <ScriptMethod>
        <Name>GetTrait</Name>
             ...

Thus it is possible to write :

$code.Ast.EndBlock.BlockKind.HasTrait('MemberName')

The New-ExtendedTypeData function create one or many files from the extension methods contained in an assembly

Add-Type -Path $AssemblyPath -Pass|
 New-ExtendedTypeData -Path c:\temp\TestPs1Xml\All.ps1xml -All

WARNING: Excluded method : System.Boolean.ToString()
WARNING: Excluded method : System.Object.ToString()
WARNING: Excluded method : System.Char.ToString()

NOTE: The ToString() method can be generate recursiv call, they are excluded. The generic methods and those returning a type Interface are excluded.

The -All parameter group all definitions to a single file :

dir  -Path c:\temp\TestPs1Xml

    Directory: C:\temp\TestPs1Xml

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       16/02/2017     12:57         269651 All.ps1xml

The absence of the -All parameter creates a file by type, the filename is the name of the corresponding type :

Add-Type -Path $AssemblyPath -Pass|
 New-ExtendedTypeData -Path c:\temp\TestPs1Xml\All.ps1xml

dir  -Path c:\temp\TestPs1Xml|more

    Directory: C:\temp\TestPs1Xml

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       16/02/2017     12:57         269651 All.ps1xml
-a----       16/02/2017     13:07           5636 System.Array.ps1xml
-a----       16/02/2017     13:07           1098 System.Boolean.ps1xml
-a----       16/02/2017     13:07           1122 System.Byte.ps1xml
-a----       16/02/2017     13:07           4404 System.Byte.Array.ps1xml
-a----       16/02/2017     13:07           8636 System.Char.ps1xml
-a----       16/02/2017     13:07            509 System.Collections.Specialized.NameValueCollection.ps1xml
-a----       16/02/2017     13:07            864 System.Data.Common.DbCommand.ps1xml
-a----       16/02/2017     13:07           3736 System.Data.Common.DbConnection.ps1xml
...

2017-04-06 Version 1.3.0

Add UncommonSense.PowerShell.TypeData Module v1.1 Fix New-Hastable

2017-02-12 Version 1.2.0

Refactoring New-ExtensionMethodTypeData function with UncommonSense.PowerShell.TypeData Module

2014-01-29 Version 1.1.0 Add Split feature on New-ExtensionMethodTypeData function

2010-07-31 Version 1.0.0 Original version

  • Any 0.0
    • Log4Posh (>= 2.0.1)
    • UncommonSense.PowerShell.TypeData (>= 1.0.2)

Owners

Laurent Dardenne

Authors

Dardenne Laurent

Project URL

https://github.com/LaurentDardenne/ExtensionMethod

License

Unknown

Tags

Template Conditionnal Directive Regex

Info

56 total downloads
4 downloads for version 1.3.1
Download (12.17 KB)
Found on the current feed only

Package history

Version Size Last updated Downloads Mirrored?
1.3.2 12.44 KB Sun, 04 Jun 2017 10:58:40 GMT 47
1.3.1 12.17 KB Sun, 16 Apr 2017 12:45:28 GMT 4
1.3.0 12.17 KB Thu, 06 Apr 2017 14:30:52 GMT 3
1.2.0 11.95 KB Thu, 16 Feb 2017 18:48:03 GMT 2