Changeset 2198
- Timestamp:
- 12/25/08 15:22:27 (3 years ago)
- Location:
- trunk/Padre
- Files:
-
- 2 added
- 2 edited
-
Makefile.PL (modified) (1 diff)
-
lib/Padre/Wx/ErrorList.pm (modified) (8 diffs)
-
t/files/error_near.pl (added)
-
t/files/error_stack.pl (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Padre/Makefile.PL
r2172 r2198 89 89 } 90 90 91 requires 'Parse::ErrorString::Perl'=> '0.0 6';91 requires 'Parse::ErrorString::Perl'=> '0.08'; 92 92 test_requires 'Test::Compile' => '0.08' unless win32; 93 93 test_requires 'Test::More' => '0.47'; -
trunk/Padre/lib/Padre/Wx/ErrorList.pm
r2184 r2198 21 21 enabled => 'enabled', 22 22 index => 'index', 23 config => 'config', 24 lang => 'lang', 23 25 parser => 'parser', 24 config => 'config',25 26 }; 26 27 … … 42 43 my $root = $self->AddRoot( 'Root', -1, -1, Wx::TreeItemData->new( 'Data' ) ); 43 44 $self->{root} = $root; 45 46 Wx::Event::EVT_TREE_ITEM_ACTIVATED($self, $self, \&on_activate); 47 Wx::Event::EVT_TREE_KEY_DOWN($self, $self, \&on_f1); 44 48 45 49 $self->{mw} = $mw; … … 60 64 $self->Show; 61 65 $self->{mw}->{gui}->{bottompane}->SetSelection($index); 62 my $lang = $self->config->{diagnostics_lang};63 if ($lang) {64 $lang =~ s/^\s*//;65 $lang =~ s/\s*$//;66 $self->{parser} = Parse::ErrorString::Perl->new(lang => $lang);67 } else {68 $self->{parser} = Parse::ErrorString::Perl->new;69 }70 66 $self->{enabled} = 1; 71 67 } … … 82 78 my $self = shift; 83 79 return unless $self->enabled; 84 my $root = $self->root; 85 80 81 my $cur_lang = $self->config->{diagnostics_lang}; 82 $cur_lang =~ s/^\s*//; 83 $cur_lang =~ s/\s*$//; 84 my $old_lang = $self->lang; 85 $self->{lang} = $cur_lang; 86 86 87 my $data = $self->data; 87 my $parser = $self->parser;88 my @errors = defined $data && $data ne '' ? $parser->parse_string($data) : ();89 88 $self->{data} = ""; 90 Wx::Event::EVT_TREE_KEY_DOWN($self, $self, \&on_f1); 91 92 foreach my $err (@errors) { 93 my $message = $err->message . " at " . $err->file_msgpath . " line " . $err->line; 94 my $err_tree_item = $self->AppendItem( $root, $message, -1, -1, Wx::TreeItemData->new( $err ) ); 95 96 Wx::Event::EVT_TREE_ITEM_ACTIVATED($self, $self, \&on_activate); 97 } 89 return unless $data; 90 91 92 my $parser_task = Padre::Task::ErrorParser->new( 93 parser => $self->parser, 94 cur_lang => $cur_lang, 95 old_lang => $old_lang, 96 data => $data, 97 ); 98 99 $parser_task->schedule; 98 100 } 99 101 … … 105 107 #my $item = $event->GetItem; 106 108 my $item = $self->GetSelection; 109 return unless $item; 107 110 my $err = $self->GetPlData($item); 111 return if $err->isa('Parse::ErrorString::Perl::StackItem'); 108 112 my $diagnostics = gettext("No diagnostics available for this error!"); 109 113 if ($err->diagnostics) { … … 112 116 } 113 117 $diagnostics = $^O eq 'MSWin32' ? $diagnostics : encode('utf8', $diagnostics); 114 my $dialog = Wx::MessageDialog->new($self->mw, $diagnostics, "Diagnostics", Wx::wxOK); 118 my $dialog_title = gettext("Diagnostics"); 119 if ($err->type_description) { 120 $dialog_title .= (": " . gettext($err->type_description)); 121 } 122 my $dialog = Wx::MessageDialog->new($self->mw, $diagnostics, $dialog_title, Wx::wxOK); 115 123 $dialog->ShowModal; 116 124 } … … 121 129 my $event = shift; 122 130 my $item = $event->GetItem; 131 return unless $item; 123 132 my $err = $self->GetPlData($item); 124 133 my $mw = $self->mw; 134 return if $err->file eq 'eval'; 125 135 $mw->setup_editor($err->file_abspath); 126 136 my $editor = $mw->selected_editor; … … 148 158 } 149 159 160 package Padre::Task::ErrorParser; 161 162 use base 'Padre::Task'; 163 164 use Class::XSAccessor 165 getters => { 166 parser => 'parser', 167 old_lang => 'old_lang', 168 cur_lang => 'cur_lang', 169 data => 'data', 170 }; 171 172 sub run { 173 my $self = shift; 174 unless ($self->parser and ( (!$self->cur_lang and !$self->old_lang) or ($self->cur_lang eq $self->old_lang) )) { 175 if ($self->cur_lang) { 176 $self->{parser} = Parse::ErrorString::Perl->new(lang => $self->cur_lang); 177 } else { 178 $self->{parser} = Parse::ErrorString::Perl->new; 179 } 180 } 181 return 1; 182 } 183 184 sub finish { 185 my $self = shift; 186 my $mw = shift; 187 188 my $errorlist = $mw->errorlist; 189 190 my $data = $self->data; 191 my $parser = $self->parser; 192 $errorlist->{parser} = $parser; 193 194 my @errors = defined $data && $data ne '' ? $parser->parse_string($data) : (); 195 196 foreach my $err (@errors) { 197 my $message = $err->message . " at " . $err->file . " line " . $err->line; 198 #$message = encode('utf8', $message); 199 if ($err->near) { 200 my $near = $err->near; 201 # some day when we have unicode in wx ... 202 #$near =~ s/\n/\x{c2b6}/g; 203 $near =~ s/\n/\\n/g; 204 $near =~ s/\r//g; 205 $message .= ", near \"$near\""; 206 } elsif ($err->at) { 207 my $at = $err->at; 208 $message .= ", at $at"; 209 } 210 my $err_tree_item = $errorlist->AppendItem( $errorlist->root, $message, -1, -1, Wx::TreeItemData->new( $err ) ); 211 212 if ($err->stack) { 213 foreach my $stack_item ($err->stack) { 214 my $stack_message = $stack_item->sub . 215 " called at " . $stack_item->file . 216 " line " . $stack_item->line; 217 $errorlist->AppendItem( $err_tree_item, $stack_message, -1, -1, Wx::TreeItemData->new( $stack_item ) ); 218 } 219 } 220 } 221 222 return 1; 223 } 224 150 225 1; 151 226
Note: See TracChangeset
for help on using the changeset viewer.
