/[eiffelstudio]/branches/eth/eve/Src/framework/code_analysis/ca_code_analyzer.e
ViewVC logotype

Diff of /branches/eth/eve/Src/framework/code_analysis/ca_code_analyzer.e

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 94149 by zurfluhs, Fri Jan 31 17:54:09 2014 UTC revision 94158 by zurfluhs, Mon Feb 3 10:37:52 2014 UTC
# Line 253  feature -- Properties Line 253  feature -- Properties
253    
254  feature {NONE} -- Implementation  feature {NONE} -- Implementation
255    
256            csv_file_name: STRING = "last_analysis_result.csv"
257    
258            csv_header: STRING = "Severity;Class;Location;Title;Description;Rule ID;Severity Score"
259    
260          analysis_completed          analysis_completed
261                          -- Will be called when the analysis task has finished.                          -- Will be called when the analysis task has finished.
262                  local                  local
263                          l_logger: CA_LOGGER                          l_csv_writer: CA_CSV_WRITER
264                  do                  do
265                          create l_logger.make ("last_analysis_result.csv")                          create l_csv_writer.make (csv_file_name, csv_header)
                                 -- CSV title column.  
                         l_logger.log ("Severity;Class;Location;Title;Description;Rule ID;Severity Score")  
266    
267                          across rules as l_rules loop                          across rules as l_rules loop
268                                  across l_rules.item.violations as l_v loop                                  across l_rules.item.violations as l_v loop
# Line 271  feature {NONE} -- Implementation Line 273  feature {NONE} -- Implementation
273                                                          -- Add the violation.                                                          -- Add the violation.
274                                                  rule_violations.at (l_v.item.affected_class).extend (l_v.item)                                                  rule_violations.at (l_v.item.affected_class).extend (l_v.item)
275                                                          -- Log it.                                                          -- Log it.
276                                                  l_logger.log (l_v.item.out)                                                  l_csv_writer.add_line (l_v.item.csv_line)
277                                          end                                          end
278                                  end                                  end
279                          end                          end
280    
281                          l_logger.close_log                          l_csv_writer.close_file
282    
283                          clear_classes_to_analyze                          clear_classes_to_analyze
284    
# Line 352  feature {NONE} -- Class-wide Options (Fr Line 354  feature {NONE} -- Class-wide Options (Fr
354                          -- Extracts options from the indexing clause of class `a_class'.                          -- Extracts options from the indexing clause of class `a_class'.
355                  local                  local
356                          l_ast: CLASS_AS                          l_ast: CLASS_AS
                         l_item: STRING_32  
357                          l_ignoredby: LINKED_LIST [STRING_32]                          l_ignoredby: LINKED_LIST [STRING_32]
358                  do                  do
359                          create l_ignoredby.make                          create l_ignoredby.make
# Line 362  feature {NONE} -- Class-wide Options (Fr Line 363  feature {NONE} -- Class-wide Options (Fr
363                          nonlibrary_class.force (False, a_class)                          nonlibrary_class.force (False, a_class)
364                          l_ast := a_class.ast                          l_ast := a_class.ast
365    
366                          if attached l_ast.internal_top_indexes then                          if attached l_ast.internal_top_indexes as l_top then
367                                  across l_ast.internal_top_indexes as l_indexes loop                                  search_indexing_tags (l_top, a_class, l_ignoredby)
368                            end
369                            if attached l_ast.internal_bottom_indexes as l_bottom then
370                                    search_indexing_tags (l_bottom, a_class, l_ignoredby)
371                            end
372    
373                                          if l_indexes.item.tag.name_32.is_equal ("ca_ignoredby") then                          ignoredby.force (l_ignoredby, a_class)
374                                                          -- Class wants to ignore certain rules.                  end
375                                                  across l_indexes.item.index_list as l_list loop  
376                                                          l_item := l_list.item.string_value_32          search_indexing_tags (a_clause: INDEXING_CLAUSE_AS; a_class: CLASS_C; a_ignoredby: LINKED_LIST [STRING_32])
377                                                          l_item.prune_all ('%"')                          -- Searches `a_clause' for settings relevant to code analysis.
378                                                          l_ignoredby.extend (l_item)                  local
379                                                  end                          l_item: STRING_32
380                                          elseif l_indexes.item.tag.name_32.is_equal ("ca_library") then                  do
381                                                          -- Class has information on whether it is a library class.                          across a_clause as ic loop
382                                                  if not l_indexes.item.index_list.is_empty then                                  if ic.item.tag.name_32.is_equal ("ca_ignoredby") then
383                                                          l_item := l_indexes.item.index_list.first.string_value_32                                                  -- Class wants to ignore certain rules.
384                                                          l_item.to_lower                                          across ic.item.index_list as l_list loop
385                                                          l_item.prune_all ('%"')                                                  l_item := l_list.item.string_value_32
386                                                          if l_item.is_equal ("true") then                                                  l_item.prune_all ('%"')
387                                                                  library_class.force (True, a_class)                                                  a_ignoredby.extend (l_item)
388                                                          elseif l_item.is_equal ("false") then                                          end
389                                                                  nonlibrary_class.force (True, a_class)                                  elseif ic.item.tag.name_32.is_equal ("ca_library") then
390                                                          end                                                  -- Class has information on whether it is a library class.
391                                            if not ic.item.index_list.is_empty then
392                                                    l_item := ic.item.index_list.first.string_value_32
393                                                    l_item.to_lower
394                                                    l_item.prune_all ('%"')
395                                                    if l_item.is_equal ("true") then
396                                                            library_class.force (True, a_class)
397                                                    elseif l_item.is_equal ("false") then
398                                                            nonlibrary_class.force (True, a_class)
399                                                  end                                                  end
400                                          end                                          end
401                                  end                                  end
402                          end                          end
   
                         ignoredby.force (l_ignoredby, a_class)  
403                  end                  end
404    
405          ignoredby: HASH_TABLE [LINKED_LIST [STRING_32], CLASS_C]          ignoredby: HASH_TABLE [LINKED_LIST [STRING_32], CLASS_C]
# Line 398  feature {NONE} -- Class-wide Options (Fr Line 409  feature {NONE} -- Class-wide Options (Fr
409                          -- Stores classes that are marked as library or non-library classes.                          -- Stores classes that are marked as library or non-library classes.
410    
411  invariant  invariant
412  --      law_of_non_contradiction: one class must not be both a library_class and a nonlibrary_class          --      law_of_non_contradiction: one class must not be both a library_class and a nonlibrary_class
413    
414  end  end

Legend:
Removed from v.94149  
changed lines
  Added in v.94158

  ViewVC Help
Powered by ViewVC 1.1.23