1 #####################################################################
3 # the Perl::Tidy::IndentationItem class supplies items which contain
4 # how much whitespace should be used at the start of a line
6 #####################################################################
8 package Perl::Tidy::IndentationItem;
11 our $VERSION = '20190601';
15 # Create an 'indentation_item' which describes one level of leading
16 # whitespace when the '-lp' indentation is used.
18 $class, $spaces, $level,
19 $ci_level, $available_spaces, $index,
20 $gnu_sequence_number, $align_paren, $stack_depth,
28 my $want_right_spaces = 0;
32 # spaces => # total leading white spaces
33 # level => # the indentation 'level'
34 # ci_level => # the 'continuation level'
35 # available_spaces => # how many left spaces available
37 # closed => # index where we saw closing '}'
38 # comma_count => # how many commas at this level?
39 # sequence_number => # output batch number
40 # index => # index in output batch list
41 # have_child => # any dependents?
42 # recoverable_spaces => # how many spaces to the right
43 # # we would like to move to get
44 # # alignment (negative if left)
45 # align_paren => # do we want to try to align
46 # # with an opening structure?
47 # marked => # if visited by corrector logic
48 # stack_depth => # indentation nesting depth
49 # starting_index => # first token index of this level
50 # arrow_count => # how many =>'s
55 _ci_level => $ci_level,
56 _available_spaces => $available_spaces,
58 _comma_count => $comma_count,
59 _sequence_number => $gnu_sequence_number,
61 _have_child => $have_child,
62 _recoverable_spaces => $want_right_spaces,
63 _align_paren => $align_paren,
65 _stack_depth => $stack_depth,
66 _starting_index => $starting_index,
67 _arrow_count => $arrow_count,
71 sub permanently_decrease_available_spaces {
73 # make a permanent reduction in the available indentation spaces
74 # at one indentation item. NOTE: if there are child nodes, their
75 # total SPACES must be reduced by the caller.
77 my ( $item, $spaces_needed ) = @_;
78 my $available_spaces = $item->get_available_spaces();
80 ( $available_spaces > $spaces_needed )
83 $item->decrease_available_spaces($deleted_spaces);
84 $item->decrease_SPACES($deleted_spaces);
85 $item->set_recoverable_spaces(0);
87 return $deleted_spaces;
90 sub tentatively_decrease_available_spaces {
92 # We are asked to tentatively delete $spaces_needed of indentation
93 # for a indentation item. We may want to undo this later. NOTE: if
94 # there are child nodes, their total SPACES must be reduced by the
96 my ( $item, $spaces_needed ) = @_;
97 my $available_spaces = $item->get_available_spaces();
99 ( $available_spaces > $spaces_needed )
102 $item->decrease_available_spaces($deleted_spaces);
103 $item->decrease_SPACES($deleted_spaces);
104 $item->increase_recoverable_spaces($deleted_spaces);
105 return $deleted_spaces;
108 sub get_stack_depth {
110 return $self->{_stack_depth};
115 return $self->{_spaces};
120 return $self->{_marked};
124 my ( $self, $value ) = @_;
125 if ( defined($value) ) {
126 $self->{_marked} = $value;
128 return $self->{_marked};
131 sub get_available_spaces {
133 return $self->{_available_spaces};
136 sub decrease_SPACES {
137 my ( $self, $value ) = @_;
138 if ( defined($value) ) {
139 $self->{_spaces} -= $value;
141 return $self->{_spaces};
144 sub decrease_available_spaces {
145 my ( $self, $value ) = @_;
146 if ( defined($value) ) {
147 $self->{_available_spaces} -= $value;
149 return $self->{_available_spaces};
152 sub get_align_paren {
154 return $self->{_align_paren};
157 sub get_recoverable_spaces {
159 return $self->{_recoverable_spaces};
162 sub set_recoverable_spaces {
163 my ( $self, $value ) = @_;
164 if ( defined($value) ) {
165 $self->{_recoverable_spaces} = $value;
167 return $self->{_recoverable_spaces};
170 sub increase_recoverable_spaces {
171 my ( $self, $value ) = @_;
172 if ( defined($value) ) {
173 $self->{_recoverable_spaces} += $value;
175 return $self->{_recoverable_spaces};
180 return $self->{_ci_level};
185 return $self->{_level};
188 sub get_sequence_number {
190 return $self->{_sequence_number};
195 return $self->{_index};
198 sub get_starting_index {
200 return $self->{_starting_index};
204 my ( $self, $value ) = @_;
205 if ( defined($value) ) {
206 $self->{_have_child} = $value;
208 return $self->{_have_child};
213 return $self->{_have_child};
216 sub set_arrow_count {
217 my ( $self, $value ) = @_;
218 if ( defined($value) ) {
219 $self->{_arrow_count} = $value;
221 return $self->{_arrow_count};
224 sub get_arrow_count {
226 return $self->{_arrow_count};
229 sub set_comma_count {
230 my ( $self, $value ) = @_;
231 if ( defined($value) ) {
232 $self->{_comma_count} = $value;
234 return $self->{_comma_count};
237 sub get_comma_count {
239 return $self->{_comma_count};
243 my ( $self, $value ) = @_;
244 if ( defined($value) ) {
245 $self->{_closed} = $value;
247 return $self->{_closed};
252 return $self->{_closed};