Insira cabeçalho em arquivos existentes

Recentemente escrevemos um post que ensinava a preparar o Visual Studio para incluir automaticamente os comentários de cabeçalho durante a criação de uma nova classe.

Com isso, todos os meus novos projetos e classes ficam organizados e dentro dos padrões de estilo de código. Se você usa o StyleCop, com certeza já enfrentou erros do tipo SA1633 (FileMustHaveHeader). Então você sabe da importância de automatizarmos esse processo.

Pois bem. Tudo estava caminhando bem até eu ter de dar manutenção em um projeto antigo. Aproveitei e comecei a colocar em prática alguns conjuntos de regras de estilo e escrita de código, entre eles o copyright.

O projeto era grande. A solution estava organizado em outros projetos que por sua vez continha dezenas de classes. Comecei a colocar os headers manualmente, um a um, até que em determinado ponto eu pensei: “Deve existir alguma forma de automatizar isso”! Que desenvolvedor não pensa assim?

Saí em buscas de soluções para o meu problema até que esbarrei em um post que utilizava PowerShell script para colocar esse cabeçalho em todos arquivos fontes de um diretório. Problema resolvido!

A solução funcionou tão bem que quero compartilhar aqui com vocês. Fiz algumas modificações no script original para se encaixar melhor ao meu projeto. Vamos lá!!!

Abra a pasta raiz do diretório do projeto que você deseja adicionar o copyright e crie um novo arquivo texto.

insira_copyright_em_arquivos_existentes_new_file

Renomeie o arquivo recém criado para talkitbr_copyright_script.ps1.

Abra esse arquivo com o seu editor de texto preferido e cole o seguinte código:

### Configure section ###
$target = (Get-Item -Path ".\" -Verbose).FullName;
$companyname = "talkitbr";
$author = [Environment]::UserName;
$date = (Get-Date).ToString("D");
$filterType = "*.cs"
$excludeFiles = @("*.Designer.cs", "T4MVC.cs", "*.generated.cs", "*.ModelUnbinder.cs")

### Header template ###
$header = "//-----------------------------------------------------------------------
// <copyright file=""{0}"" company=""{1}"">
// Copyright (c) {1}. All rights reserved.
// </copyright>
// <author>{2}</author>
// <date>{3}</date>
//-----------------------------------------------------------------------`r`n"

### Don't change bellow this line ###
function Write-Header ($file)
{
	$content = Get-Content $file
	$contentAsString = $content | Out-String

	if(!$contentAsString.StartsWith("//"))
	{
		$filename = Split-Path -Leaf $file 
		$fileheader = $header -f $filename, $companyname, $author, $date

		Set-Content $file $fileheader -encoding UTF8
		Add-Content $file $content
	}
}

Get-ChildItem $target -Filter $filterType -Exclude $excludeFiles -Recurse | % `
{
	Write-Header $_.PSPath.Split(":", 3)[2]
}

Altere as sessões de configuração e de template para se adaptar as suas necessidades. Repare que configurei o script para filtrar apenas arquivos com extensões .cs e também adicionei uma lista de arquivos que devem ser ignorados pois não faria sentido eu adicionar headers em arquivos gerados automaticamente.

Pronto! Só precisamos agora rodar o script. Para evitar problemas de acesso aos arquivos, garanta que todos os arquivos e projetos estejam fechados. Com isso, clique com o botão direito do mouse no arquivo talkitbr_copyright_script.ps1 e selecione a opção Run with PowerShell.

insira_copyright_em_arquivos_existentes_run

Uma tela azul se abrirá por alguns instantes e logo em seguida será fechada. Isso significa que o script PowerShell rodou e se tudo funcionou como esperado, devemos ter algo do tipo em nossos arquivos:

//-----------------------------------------------------------------------
// <copyright file="MainPage.xaml.cs" company="talkitbr">
// Copyright (c) talkitbr. All rights reserved.
// </copyright>
// <author>patrick.tedeschi</author>
// <date>Tuesday, December 29, 2015</date>
//-----------------------------------------------------------------------

Não tenha medo de rodar o script mais de uma vez pois já tratamos esse cenário ao verificar se o começo do arquivo começa com //. Neste caso, assumimos que o arquivo já contém o cabeçalho e não acrescentamos nada a mais.

Espero que essas dicas sejam uteis para vocês assim como foram para mim! Se você conhece outros scripts que podem facilitar o dia a dia do desenvolvimento de software, colabore com seu comentário. Espero que continuem curtindo o blog do talkitbr. Até a próxima!!!

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s