package TidyView::Display; use strict; use warnings; use Log::Log4perl qw(get_logger); use Data::Dumper; INIT { eval "require Perl::Signature"; if ($@) { undef *_warnSemanticDelta; } else { *_warnSemanticDelta = \&warnSemanticRuination; } } sub preview_tidy_changes { my ($self, %args) = @_; my ($fileToTidy, $DiffTextWidget, $rootWindow) = @args{qw(fileToTidy DiffTextWidget rootWindow )}; $rootWindow->Busy(-recurse => 1); my $tidiedText = PerlTidy::Run->execute(file => $fileToTidy); $DiffTextWidget->load(a => $fileToTidy); $DiffTextWidget->load(b => $tidiedText); $DiffTextWidget->compare(-granularity => qr/(\s+|\W)/); $rootWindow->Unbusy(); if (defined *_warnSemanticDelta{CODE}) { if (Perl::Signature->source_signature($DiffTextWidget->Subwidget('text_a')->get('1.0', 'end')) ne Perl::Signature->source_signature($DiffTextWidget->Subwidget('text_b')->get('1.0', 'end'))) { $self->_warnSemanticDelta(widget => $rootWindow); } } } sub warnSemanticRuination { my ($self, %args) = @_; my ($widget) = @args{qw(widget)}; $widget->messageBox( -title => 'Problem tidying File', -icon => 'warning', -type => 'Ok', -message => "Semantic change detected on tidied version\nDo not use these options", ); } 1;