PPIx::EditorTools::FindUnmatchedBrace - PPIx::EditorTools::FindUnmatchedBrace documentation


PPIx-EditorTools documentation Contained in the PPIx-EditorTools distribution.

Index


Code Index:

SYNOPSIS

Top

  my $brace = PPIx::EditorTools::FindUnmatchedBrace->new->find(
        code => "package TestPackage;\nsub x { 1;\n"
      );
  my $location = $brace->element->location;

DESCRIPTION

Top

Finds the location of unmatched braces in a PPI::Document.

METHODS

Top

new()

Constructor. Generally shouldn't be called with any arguments.

find( ppi => PPI::Document $ppi ) =item find( code => Str $code )

Accepts either a PPI::Document to process or a string containing the code (which will be converted into a PPI::Document) to process. Finds the location of unmatched braces. Returns a PPIx::EditorTools::ReturnObject with the unmatched brace (a PPI::Structure::Block) available via the element accessor. If there is no unmatched brace, returns undef.

SEE ALSO

Top

This class inherits from PPIx::EditorTools. Also see App::EditorTools, Padre, and PPI.


PPIx-EditorTools documentation Contained in the PPIx-EditorTools distribution.
package PPIx::EditorTools::FindUnmatchedBrace;

# ABSTRACT: PPI-based unmatched-brace-finder

use 5.008;
use strict;
use warnings;
use Carp;

use base 'PPIx::EditorTools';
use Class::XSAccessor accessors => {};

use PPI;

our $VERSION = '0.15';

sub find {
	my ( $self, %args ) = @_;
	$self->process_doc(%args);

	my $ppi = $self->ppi;

	my $where = $ppi->find( \&PPIx::EditorTools::find_unmatched_brace );
	if ($where) {
		@$where = sort {
			       PPIx::EditorTools::element_depth($b) <=> PPIx::EditorTools::element_depth($a)
				or $a->location->[0] <=> $b->location->[0]
				or $a->location->[1] <=> $b->location->[1]
		} @$where;

		return PPIx::EditorTools::ReturnObject->new(
			ppi     => $ppi,
			element => $where->[0]
		);
	}
	return;
}

1;

__END__

# Copyright 2008-2009 The Padre development team as listed in Padre.pm.
# LICENSE
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl 5 itself.