Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Perl::Metrics::Simple:UserlContributedPPrl::Metrics::Simple::Analysis::File(3)

NAME
       Perl::Metrics::Simple::Analysis::File - Methods analyzing a single
       file.

SYNOPSIS
	 use Perl::Metrics::Simple::Analysis::File;
	 my $object = Perl::Metrics::Simple::Analysis::File->new(file => 'path/to/file');

VERSION
       This is VERSION 0.1

DESCRIPTION
       A Perl::Metrics::Simple::Analysis::File object is created by
       Perl::Metrics::Simple for each file analyzed. These objects are
       aggregated into a Perl::Metrics::Simple::Analysis object	by
       Perl::Metrics::Simple.

       In general you will not use this	class directly,	instead	you will use
       Perl::Metrics::Simple, but there's no harm in exposing the various
       methods this class provides.

CLASS METHODS
   new
       Takes named parameters, current only the	path parameter is recognized:

	 my $file_results = BPerl::Metrics::Simple::Analysis::File->new( path => $path );

       Returns a new Perl::Metrics::Simple::Analysis::File object which	has
       been populated with the results of analyzing the	file at	path.

       Throws an exception if the path is missing or unreadable.

OBJECT METHODS
       Call on an object.

   all_counts
       Convenience method.  Takes no arguments and returns a hashref of	all
       counts:
	   {
	       path	  => $self->path,
	       lines	  => $self->lines,
	       main_stats => $self->main_stats,
	       subs	  => $self->subs,
	       packages	  => $self->packages,
	   }

   analyze_main
       Takes a PPI document and	an arrayref of PPI::Statement::Sub objects and
       returns a hashref with information about	the 'main' (non-subroutine)
       portions	of the document:

	 {
	   lines	     =>	$lines,	     # Line count outside subs.	Skips comments and pod.
	   mccabe_complexity =>	$complexity, # Cyclomatic complexity of	all non-sub areas
	   path		     =>	'/path/to/file',
	   name		     =>	'{code not in named subroutines}',  # always the same name
	 };

   get_node_length
       Takes a PPI node	and returns a count of the newlines it contains. PPI
       normalizes line endings to newlines so CR/LF, CR	and LF all come	out
       the same. The line counts reported by the various methods in this class
       all exclude blank lines,	comment	lines and pod (the PPI document	is
       pruned before counting.)

   lines
       Total non-blank,	non-comment, non-pod lines.

   main_stats
       Returns the hashref generated by	analyze_main without re-analyzing
       document.

   logic_keywords
       Returns an array	(in array context) or ref-to-ARRAY of the keywords
       used in calculating complexity. See Logic Keywords section below.

   logic_operators
       Returns an array	(in array context) or ref-to-ARRAY of the operators
       used in calculating complexity. See Logic Operators section below.

   method_modifiers
       Returns an array	(in array context) or ref-to-ARRAY of the method
       modifiers considered to return methods during calculating complexity.
       See Method modifiers section below.

   measure_complexity
       Takes a PPI element and measures	an approximation of the	McCabe
       Complexity (aka Cyclomatic Complexity) of the code.

       McCabe Complexity is basically a	count of how many paths	there are
       through the code.

       We use a	simplified method for counting this, which ignores things like
       the possibility that a 'use' statement could throw an exception.

       The actual measurement we use for a chunk of code is 1 plus 1 each
       logic keyword or	operator:

       Logic operators:

       The default list	is:

       @Perl::Metrics::Simple::Analysis::File::DEFAULT_LOGIC_OPERATORS

	   !
	   !~
	   &&
	   &&=
	   //
	   <
	   <<=
	   <=>
	   ==
	   =~
	   >
	   >>=
	   ?
	   and
	   cmp
	   eq
	   gt
	   lt
	   ne
	   not
	   or
	   xor
	   ||
	   ||=
	   ~~

       You can supply your own list by setting:
       @Perl::Metrics::Simple::Analysis::File::LOGIC_OPERATORS before creating
       a new object.

       Logic keywords:

       @Perl::Metrics::Simple::Analysis::File::DEFAULT_LOGIC_KEYWORDS

	   else
	   elsif
	   for
	   foreach
	   goto
	   grep
	   if
	   last
	   map
	   next
	   unless
	   until
	   while

       You can supply your own list by setting:
       @Perl::Metrics::Simple::Analysis::File::LOGIC_KEYWORDS before creating
       a new object.

       Method modifiers:

       @Perl::Metrics::Simple::Analysis::File::DEFAULT_METHOD_MODIFIERS

	   before
	   after
	   around

       You can supply your own list by setting:
       @Perl::Metrics::Simple::Analysis::File::METHOD_MODIFIERS	before
       creating	a new object.

       Examples	of Complexity

       Here are	a couple of examples of	how we count complexity:

       Example of complexity count of 1:

	  use Foo;
	  print	"Hello world.\n";
	  exit;

       Example of complexity count of 2:

	  if ( $a ) {	      #	The "if" adds 1.
	      #	do something
	  }

       Example of complexity count of 6:

	   sub foo {				  # 1: for non-empty code
	      if ( @list ) {			  # 1: "if"
		  foreach my $x	( @list	) {	  # 1: "foreach"
		      if ( ! $x	) {		  # 2: 1 for "if" and 1	for "!"
			  do_something($x);
		      }
		      else {			  # 1 for "else"
			  do_something_else($x);
		      }
		  }
	      }
	      return;
	   }

   packages
       Arrayref	of unique packages found in the	file.

   path
       Either the path to the file, or a scalar	ref if that was	supplied
       instaed of a path.

   subs
       Count of	subroutines found.

STATIC PACKAGE SUBROUTINES
       Utility subs used internally, but no harm in exposing them for now.

   hashify
	%hash =	Perl::Metrics::Simple::Analysis::File::hashify(@list);

       Takes an	array and returns a hash using the array values	as the keys
       and with	the values all set to 1.

   is_hash_key
	$boolean = Perl::Metrics::Simple::Analysis::File::is_hash_key($ppi_element);

       Takes a PPI::Element and	returns	true if	the element is a hash key, for
       example "foo" and "bar" are hash	keys in	the following:

	 { foo => 123, bar => $a }

       Copied and somehwat simplified from
       http://search.cpan.org/src/THALJEF/Perl-Critic-0.19/lib/Perl/Critic/Utils.pm
       See Perl::Critic::Utils.

BUGS AND LIMITATIONS
       None reported yet ;-)

DEPENDENCIES
       Readonly
       Perl::Metrics::Simple::Analysis

SUPPORT
       Via CPAN:

   Disussion Forum
       http://www.cpanforum.com/dist/Perl-Metrics-Simple

   Bug Reports
       http://rt.cpan.org/NoAuth/Bugs.html?Dist=Perl-Metrics-Simple

AUTHOR
	   Matisse Enzer
	   CPAN	ID: MATISSE
	   Eigenstate Consulting, LLC
	   matisse@eigenstate.net
	   http://www.eigenstate.net/

LICENSE	AND COPYRIGHT
       Copyright (c) 2006-2009 by Eigenstate Consulting, LLC.

       This program is free software; you can redistribute it and/or modify it
       under the same terms as Perl itself.

       The full	text of	the license can	be found in the	LICENSE	file included
       with this module.

perl v5.24.1			  2017Perl::Metrics::Simple::Analysis::File(3)

NAME | SYNOPSIS | VERSION | DESCRIPTION | CLASS METHODS | OBJECT METHODS | STATIC PACKAGE SUBROUTINES | BUGS AND LIMITATIONS | DEPENDENCIES | SUPPORT | AUTHOR | LICENSE AND COPYRIGHT

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=Perl::Metrics::Simple::Analysis::File&sektion=3&manpath=FreeBSD+12.0-RELEASE+and+Ports>

home | help