Skip to content

Commit

Permalink
Adds JSON output mode (#170)
Browse files Browse the repository at this point in the history
Allows to parse the output with another software
  • Loading branch information
leggettc18 committed Aug 24, 2023
1 parent 4d21b8a commit b4f7b45
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 2 deletions.
1 change: 1 addition & 0 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ gio_dep = dependency('gio-2.0', version: '>=2.56.4')
posix_dep = valac.find_library('posix')
libvala_required_version = '>= 0.40.4'
libvala_dep = dependency('libvala-@0@'.format(libvala_version), version: libvala_required_version)
json_dep = dependency('json-glib-1.0')

subdir('lib')
subdir('src')
Expand Down
72 changes: 71 additions & 1 deletion src/Application.vala
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public class ValaLint.Application : GLib.Application {
private static bool exit_with_zero = false;
private static bool generate_config_file = false;
private static bool auto_fix = false;
private static bool json_output = false;
private static string? config_file = null;
private static string ignore_pattern_list = "";
private static int fnmatch_flags = Posix.FNM_EXTMATCH | Posix.FNM_PERIOD | Posix.FNM_PATHNAME;
Expand All @@ -50,6 +51,8 @@ public class ValaLint.Application : GLib.Application {
"Generate a sample configuration file with default values." },
{ "fix", 'f', 0, OptionArg.NONE, ref auto_fix,
"Fix any auto-fixable mistakes." },
{ "json-output", 'j', 0, OptionArg.NONE, ref json_output,
"Output in JSON format." },
{ null }
};

Expand Down Expand Up @@ -199,7 +202,12 @@ public class ValaLint.Application : GLib.Application {
}

/* 4. Print mistakes */
bool has_errors = print_mistakes (file_data_list);
bool has_errors = false;
if (json_output) {
has_errors = print_mistakes_json (file_data_list);
} else {
has_errors = print_mistakes (file_data_list);
}

if (exit_with_zero || !has_errors) {
return 0;
Expand Down Expand Up @@ -363,6 +371,68 @@ public class ValaLint.Application : GLib.Application {
return num_errors > 0;
}

bool print_mistakes_json (Vala.ArrayList<FileData?> file_data_list) {
int num_errors = 0;
int num_warnings = 0;
Json.Builder builder = new Json.Builder ();
builder.begin_object ();
builder.set_member_name ("mistakes");
builder.begin_array ();

foreach (FileData file_data in file_data_list) {
if (!file_data.mistakes.is_empty) {
foreach (FormatMistake mistake in file_data.mistakes) {
switch (mistake.check.state) {
case ERROR:
num_errors++;
break;

case WARN:
num_warnings++;
break;

default:
break;
}

builder.begin_object ();
builder.set_member_name ("filename");
builder.add_string_value (file_data.name);
builder.set_member_name ("line");
builder.add_int_value (mistake.begin.line);
builder.set_member_name ("column");
builder.add_int_value (mistake.begin.column);
if (print_mistakes_end) {
builder.set_member_name ("endLine");
builder.add_int_value (mistake.end.line);
builder.set_member_name ("endColumn");
builder.add_int_value (mistake.end.column);
}
builder.set_member_name ("level");
builder.add_string_value (mistake.check.state.to_string ());
builder.set_member_name ("message");
builder.add_string_value (mistake.mistake);
builder.set_member_name ("ruleId");
builder.add_string_value (mistake.check.title);
builder.end_object ();
}
}
}
builder.end_array ();
builder.end_object ();

Json.Generator generator = new Json.Generator ();
Json.Node root = builder.get_root ();
generator.set_root (root);
application_command_line.print ("%s\n", generator.to_data (null));

if (num_errors + num_warnings == 0) {
return false;
}

return num_errors > 0;
}

string apply_color_for_state (string str, Config.State state) {
switch (state) {
case ERROR:
Expand Down
3 changes: 2 additions & 1 deletion src/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ vala_lint = executable(
app_files,
dependencies: [
vala_linter_dep,
posix_dep
posix_dep,
json_dep
],
install : true
)

0 comments on commit b4f7b45

Please sign in to comment.