google / go-jsonnet

Apache License 2.0
1.63k stars 234 forks source link

Running linter on multiple files at once suspiciously slow #557

Open sbarzowski opened 3 years ago

sbarzowski commented 3 years ago

There is something weird going on:

--- PASS: TestLinter (9.16s)
    --- PASS: TestLinter/testdata/42 (0.00s)
    --- PASS: TestLinter/testdata/argcheck_additional (0.00s)
    --- PASS: TestLinter/testdata/argcheck_missed_required (0.00s)
    --- PASS: TestLinter/testdata/argcheck_missing (0.00s)
    --- PASS: TestLinter/testdata/argcheck_wrong_name (0.00s)
    --- PASS: TestLinter/testdata/array_widen (0.00s)
    --- PASS: TestLinter/testdata/call_imported_number (0.00s)
    --- PASS: TestLinter/testdata/call_integer (0.00s)
    --- PASS: TestLinter/testdata/deep_array_call_integer (0.00s)
    --- PASS: TestLinter/testdata/deeper_array_call_integer (0.00s)
    --- PASS: TestLinter/testdata/deepest_array_call_integer (0.01s)
    --- PASS: TestLinter/testdata/deepest_array_call_integer2 (0.01s)
    --- PASS: TestLinter/testdata/dollar (0.00s)
    --- PASS: TestLinter/testdata/endless_loop (0.00s)
    --- PASS: TestLinter/testdata/endless_loop2 (0.00s)
    --- PASS: TestLinter/testdata/endless_loop3 (0.00s)
    --- PASS: TestLinter/testdata/endless_loop4 (0.00s)
    --- PASS: TestLinter/testdata/from_array_call_integer (0.00s)
    --- PASS: TestLinter/testdata/from_function_result_call_integer (0.00s)
    --- PASS: TestLinter/testdata/from_object_call_integer (0.00s)
    --- PASS: TestLinter/testdata/from_object_call_integer2 (0.00s)
    --- PASS: TestLinter/testdata/from_object_local_call_integer (0.00s)
    --- PASS: TestLinter/testdata/from_object_multiple_field_types (0.00s)
    --- PASS: TestLinter/testdata/from_recursive_array_call_integer (0.00s)
    --- PASS: TestLinter/testdata/from_tuple_call_int (0.00s)
    --- PASS: TestLinter/testdata/import (0.00s)
    --- PASS: TestLinter/testdata/import2 (0.00s)
    --- PASS: TestLinter/testdata/index_any_with_any (0.00s)
    --- PASS: TestLinter/testdata/index_array_or_string_with_string (0.00s)
    --- PASS: TestLinter/testdata/index_array_with_number (0.00s)
    --- PASS: TestLinter/testdata/index_array_with_string (0.00s)
    --- PASS: TestLinter/testdata/index_function (0.00s)
    --- PASS: TestLinter/testdata/index_object_with_number (0.00s)
    --- PASS: TestLinter/testdata/index_object_with_string (0.00s)
    --- PASS: TestLinter/testdata/index_string_with_integer (0.00s)
    --- PASS: TestLinter/testdata/index_string_with_string (0.00s)
    --- PASS: TestLinter/testdata/indirect_call_integer (0.00s)
    --- PASS: TestLinter/testdata/library-like-use (0.00s)
    --- PASS: TestLinter/testdata/library-like (0.00s)
    --- PASS: TestLinter/testdata/max_arity_violated (0.00s)
    --- PASS: TestLinter/testdata/min_arity_violated (0.00s)
    --- PASS: TestLinter/testdata/multiple_errors (0.00s)
    --- PASS: TestLinter/testdata/not_any (0.00s)
    --- PASS: TestLinter/testdata/not_any2 (0.00s)
    --- PASS: TestLinter/testdata/obj (0.00s)
    --- PASS: TestLinter/testdata/object_index_unknown (0.00s)
    --- PASS: TestLinter/testdata/object_or_array_indexing (0.00s)
    --- PASS: TestLinter/testdata/object_or_string_indexing (0.00s)
    --- PASS: TestLinter/testdata/plussuper (0.00s)
    --- PASS: TestLinter/testdata/plussuper2 (0.00s)
    --- PASS: TestLinter/testdata/stdlib_call_returned_integer (0.00s)
    --- PASS: TestLinter/testdata/stdlib_return_type_test (0.00s)
    --- PASS: TestLinter/testdata/stdlib_return_types (0.00s)
    --- PASS: TestLinter/testdata/string_indexing (0.00s)
    --- PASS: TestLinter/testdata/subtract-arrays (0.00s)
    --- PASS: TestLinter/testdata/super_index_array (0.00s)
    --- PASS: TestLinter/testdata/unary (0.00s)
    --- PASS: TestLinter/testdata/widen_any_object (0.00s)
    --- PASS: TestLinter/../testdata/argcapture_builtin_call (0.00s)
    --- PASS: TestLinter/../testdata/array (0.00s)
    --- PASS: TestLinter/../testdata/array_comp_try_iterate_over_obj (0.00s)
    --- PASS: TestLinter/../testdata/array_index1 (0.00s)
    --- PASS: TestLinter/../testdata/array_index2 (0.00s)
    --- PASS: TestLinter/../testdata/array_index3 (0.00s)
    --- PASS: TestLinter/../testdata/array_index4 (0.00s)
    --- PASS: TestLinter/../testdata/array_out_of_bounds (0.00s)
    --- PASS: TestLinter/../testdata/array_out_of_bounds2 (0.00s)
    --- PASS: TestLinter/../testdata/array_out_of_bounds3 (0.00s)
    --- PASS: TestLinter/../testdata/array_out_of_bounds4 (0.00s)
    --- PASS: TestLinter/../testdata/array_plus_bad (0.00s)
    --- PASS: TestLinter/../testdata/arrcomp (0.00s)
    --- PASS: TestLinter/../testdata/arrcomp2 (0.00s)
    --- PASS: TestLinter/../testdata/arrcomp3 (0.00s)
    --- PASS: TestLinter/../testdata/arrcomp4 (0.00s)
    --- PASS: TestLinter/../testdata/arrcomp5 (0.00s)
    --- PASS: TestLinter/../testdata/arrcomp6 (0.00s)
    --- PASS: TestLinter/../testdata/arrcomp7 (0.00s)
    --- PASS: TestLinter/../testdata/arrcomp_if (0.00s)
    --- PASS: TestLinter/../testdata/arrcomp_if2 (0.00s)
    --- PASS: TestLinter/../testdata/arrcomp_if3 (0.00s)
    --- PASS: TestLinter/../testdata/arrcomp_if4 (0.00s)
    --- PASS: TestLinter/../testdata/arrcomp_if5 (0.00s)
    --- PASS: TestLinter/../testdata/arrcomp_if6 (0.00s)
    --- PASS: TestLinter/../testdata/arrcomp_if7 (0.00s)
    --- PASS: TestLinter/../testdata/assert (0.00s)
    --- PASS: TestLinter/../testdata/assert2 (0.00s)
    --- PASS: TestLinter/../testdata/assert3 (0.00s)
    --- PASS: TestLinter/../testdata/assert_equal (0.00s)
    --- PASS: TestLinter/../testdata/assert_equal2 (0.00s)
    --- PASS: TestLinter/../testdata/assert_equal3 (0.00s)
    --- PASS: TestLinter/../testdata/assert_equal4 (0.00s)
    --- PASS: TestLinter/../testdata/assert_equal5 (0.00s)
    --- PASS: TestLinter/../testdata/assert_equal6 (0.00s)
    --- PASS: TestLinter/../testdata/assert_failed (0.00s)
    --- PASS: TestLinter/../testdata/assert_failed_custom (0.00s)
    --- PASS: TestLinter/../testdata/bad_function_call (0.00s)
    --- PASS: TestLinter/../testdata/bad_function_call2 (0.00s)
    --- PASS: TestLinter/../testdata/bad_function_call_and_error (0.00s)
    --- PASS: TestLinter/../testdata/bad_index_array (0.00s)
    --- PASS: TestLinter/../testdata/bad_index_object (0.00s)
    --- PASS: TestLinter/../testdata/bad_index_string (0.00s)
    --- PASS: TestLinter/../testdata/binaryNot (0.00s)
    --- PASS: TestLinter/../testdata/binaryNot2 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_and (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_and2 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_and3 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_and4 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_and5 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_and6 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_and7 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_or (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_or10 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_or2 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_or3 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_or4 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_or5 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_or6 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_or7 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_or8 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_or9 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_shift (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_shift2 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_shift3 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_shift4 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_shift5 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_shift6 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_xor (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_xor2 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_xor3 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_xor4 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_xor5 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_xor6 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_xor7 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_xor8 (0.00s)
    --- PASS: TestLinter/../testdata/bitwise_xor9 (0.00s)
    --- PASS: TestLinter/../testdata/block_escaping (0.00s)
    --- PASS: TestLinter/../testdata/block_string (0.00s)
    --- PASS: TestLinter/../testdata/boolean_literal (0.00s)
    --- PASS: TestLinter/../testdata/builtinBase64 (0.00s)
    --- PASS: TestLinter/../testdata/builtinBase64Decode (0.00s)
    --- PASS: TestLinter/../testdata/builtinBase64DecodeBytes (0.00s)
    --- PASS: TestLinter/../testdata/builtinBase64DecodeBytes_high_codepoint (0.00s)
    --- PASS: TestLinter/../testdata/builtinBase64DecodeBytes_invalid_base64_data (0.00s)
    --- PASS: TestLinter/../testdata/builtinBase64DecodeBytes_wrong_type (0.00s)
    --- PASS: TestLinter/../testdata/builtinBase64Decode_high_codepoint (0.00s)
    --- PASS: TestLinter/../testdata/builtinBase64Decode_invalid_base64_data (0.00s)
    --- PASS: TestLinter/../testdata/builtinBase64Decode_wrong_type (0.00s)
    --- PASS: TestLinter/../testdata/builtinBase64_byte_array (0.00s)
    --- PASS: TestLinter/../testdata/builtinBase64_invalid_byte_array (0.00s)
    --- PASS: TestLinter/../testdata/builtinBase64_invalid_byte_array1 (0.00s)
    --- PASS: TestLinter/../testdata/builtinBase64_invalid_byte_array2 (0.00s)
    --- PASS: TestLinter/../testdata/builtinBase64_non_string_non_array (0.00s)
    --- PASS: TestLinter/../testdata/builtinBase64_string_high_codepoint (0.00s)
    --- PASS: TestLinter/../testdata/builtinChar (0.00s)
    --- PASS: TestLinter/../testdata/builtinChar2 (0.00s)
    --- PASS: TestLinter/../testdata/builtinChar3 (0.00s)
    --- PASS: TestLinter/../testdata/builtinChar4 (0.00s)
    --- PASS: TestLinter/../testdata/builtinChar5 (0.00s)
    --- PASS: TestLinter/../testdata/builtinChar6 (0.00s)
    --- PASS: TestLinter/../testdata/builtinChar7 (0.00s)
    --- PASS: TestLinter/../testdata/builtinManifestJsonEx (0.00s)
    --- PASS: TestLinter/../testdata/builtinObjectFieldsEx (0.00s)
    --- PASS: TestLinter/../testdata/builtinObjectFieldsExWithHidden (0.00s)
    --- PASS: TestLinter/../testdata/builtinObjectFieldsEx_bad (0.00s)
    --- PASS: TestLinter/../testdata/builtinObjectFieldsEx_bad2 (0.00s)
    --- PASS: TestLinter/../testdata/builtinObjectHasEx (0.00s)
    --- PASS: TestLinter/../testdata/builtinObjectHasExBadBoolean (0.00s)
    --- PASS: TestLinter/../testdata/builtinObjectHasExBadField (0.00s)
    --- PASS: TestLinter/../testdata/builtinObjectHasExBadObject (0.00s)
    --- PASS: TestLinter/../testdata/builtinReverse (0.00s)
    --- PASS: TestLinter/../testdata/builtinReverse_empty (0.00s)
    --- PASS: TestLinter/../testdata/builtinReverse_many (0.00s)
    --- PASS: TestLinter/../testdata/builtinReverse_not_array (0.00s)
    --- PASS: TestLinter/../testdata/builtinReverse_single (0.00s)
    --- PASS: TestLinter/../testdata/builtinSubStr_first_param_not_string (0.00s)
    --- PASS: TestLinter/../testdata/builtinSubStr_length_larger (0.00s)
    --- PASS: TestLinter/../testdata/builtinSubStr_second_parameter_not_integer (0.00s)
    --- PASS: TestLinter/../testdata/builtinSubStr_second_parameter_not_number (0.00s)
    --- PASS: TestLinter/../testdata/builtinSubStr_start_larger_then_size (0.00s)
    --- PASS: TestLinter/../testdata/builtinSubStr_third_parameter_less_then_zero (0.00s)
    --- PASS: TestLinter/../testdata/builtinSubStr_third_parameter_not_integer (0.00s)
    --- PASS: TestLinter/../testdata/builtinSubStr_third_parameter_not_number (0.00s)
    --- PASS: TestLinter/../testdata/builtinSubstr (0.00s)
    --- PASS: TestLinter/../testdata/builtin_acos (0.00s)
    --- PASS: TestLinter/../testdata/builtin_asin (0.00s)
    --- PASS: TestLinter/../testdata/builtin_atan (0.00s)
    --- PASS: TestLinter/../testdata/builtin_ceil (0.00s)
    --- PASS: TestLinter/../testdata/builtin_cos (0.00s)
    --- PASS: TestLinter/../testdata/builtin_exp (0.00s)
    --- PASS: TestLinter/../testdata/builtin_exp2 (0.00s)
    --- PASS: TestLinter/../testdata/builtin_exp3 (0.00s)
    --- PASS: TestLinter/../testdata/builtin_exp4 (0.00s)
    --- PASS: TestLinter/../testdata/builtin_exp5 (0.00s)
    --- PASS: TestLinter/../testdata/builtin_exp6 (0.00s)
    --- PASS: TestLinter/../testdata/builtin_exp7 (0.00s)
    --- PASS: TestLinter/../testdata/builtin_exp8 (0.00s)
    --- PASS: TestLinter/../testdata/builtin_floor (0.00s)
    --- PASS: TestLinter/../testdata/builtin_log (0.00s)
    --- PASS: TestLinter/../testdata/builtin_log2 (0.00s)
    --- PASS: TestLinter/../testdata/builtin_log3 (0.00s)
    --- PASS: TestLinter/../testdata/builtin_log4 (0.00s)
    --- PASS: TestLinter/../testdata/builtin_log5 (0.00s)
    --- PASS: TestLinter/../testdata/builtin_log6 (0.00s)
    --- PASS: TestLinter/../testdata/builtin_log7 (0.00s)
    --- PASS: TestLinter/../testdata/builtin_log8 (0.00s)
    --- PASS: TestLinter/../testdata/builtin_sin (0.00s)
    --- PASS: TestLinter/../testdata/builtin_sqrt (0.00s)
    --- PASS: TestLinter/../testdata/builtin_sqrt2 (0.00s)
    --- PASS: TestLinter/../testdata/builtin_tan (0.00s)
    --- PASS: TestLinter/../testdata/call_number (0.00s)
    --- PASS: TestLinter/../testdata/comparisons (0.00s)
    --- PASS: TestLinter/../testdata/decodeUTF8 (0.00s)
    --- PASS: TestLinter/../testdata/div1 (0.00s)
    --- PASS: TestLinter/../testdata/div2 (0.00s)
    --- PASS: TestLinter/../testdata/div3 (0.00s)
    --- PASS: TestLinter/../testdata/div4 (0.00s)
    --- PASS: TestLinter/../testdata/div_by_zero (0.00s)
    --- PASS: TestLinter/../testdata/dollar_bad (0.00s)
    --- PASS: TestLinter/../testdata/dollar_end (0.00s)
    --- PASS: TestLinter/../testdata/dollar_end2 (0.00s)
    --- PASS: TestLinter/../testdata/double_thunk (0.00s)
    --- PASS: TestLinter/../testdata/empty_array (0.00s)
    --- PASS: TestLinter/../testdata/empty_object (0.00s)
    --- PASS: TestLinter/../testdata/empty_object_comp (0.00s)
    --- PASS: TestLinter/../testdata/encodeUTF8 (0.00s)
    --- PASS: TestLinter/../testdata/equals (0.00s)
    --- PASS: TestLinter/../testdata/equals2 (0.00s)
    --- PASS: TestLinter/../testdata/equals3 (0.00s)
    --- PASS: TestLinter/../testdata/equals4 (0.00s)
    --- PASS: TestLinter/../testdata/equals5 (0.00s)
    --- PASS: TestLinter/../testdata/equals6 (0.00s)
    --- PASS: TestLinter/../testdata/error (0.00s)
    --- PASS: TestLinter/../testdata/error_from_array (0.00s)
    --- PASS: TestLinter/../testdata/error_from_func (0.00s)
    --- PASS: TestLinter/../testdata/error_function_fail (0.00s)
    --- PASS: TestLinter/../testdata/error_hexnumber (0.00s)
    --- PASS: TestLinter/../testdata/error_in_method (0.00s)
    --- PASS: TestLinter/../testdata/error_in_object_local (0.00s)
    --- PASS: TestLinter/../testdata/error_object (0.00s)
    --- PASS: TestLinter/../testdata/escaped_fields (0.00s)
    --- PASS: TestLinter/../testdata/escaped_single_quote (0.00s)
    --- PASS: TestLinter/../testdata/extvar_code (0.00s)
    --- PASS: TestLinter/../testdata/extvar_error (0.00s)
    --- PASS: TestLinter/../testdata/extvar_hermetic (0.00s)
    --- PASS: TestLinter/../testdata/extvar_mutually_recursive (0.00s)
    --- PASS: TestLinter/../testdata/extvar_not_a_string (0.00s)
    --- PASS: TestLinter/../testdata/extvar_self_recursive (0.00s)
    --- PASS: TestLinter/../testdata/extvar_static_error (0.00s)
    --- PASS: TestLinter/../testdata/extvar_string (0.00s)
    --- PASS: TestLinter/../testdata/extvar_unknown (0.00s)
    --- PASS: TestLinter/../testdata/false (0.00s)
    --- PASS: TestLinter/../testdata/fieldname_not_string (0.00s)
    --- PASS: TestLinter/../testdata/filled_thunk (0.00s)
    --- PASS: TestLinter/../testdata/function_call (0.00s)
    --- PASS: TestLinter/../testdata/function_capturing (0.00s)
    --- PASS: TestLinter/../testdata/function_in_object (0.00s)
    --- PASS: TestLinter/../testdata/function_manifested (0.00s)
    --- PASS: TestLinter/../testdata/function_no_params (0.00s)
    --- PASS: TestLinter/../testdata/function_plus_bad (0.00s)
    --- PASS: TestLinter/../testdata/function_plus_string (0.00s)
    --- PASS: TestLinter/../testdata/function_too_many_params (0.00s)
    --- PASS: TestLinter/../testdata/function_with_argument (0.00s)
    --- PASS: TestLinter/../testdata/greater (0.00s)
    --- PASS: TestLinter/../testdata/greaterEq (0.00s)
    --- PASS: TestLinter/../testdata/greaterEq2 (0.00s)
    --- PASS: TestLinter/../testdata/ifthen_false (0.00s)
    --- PASS: TestLinter/../testdata/ifthenelse_false (0.00s)
    --- PASS: TestLinter/../testdata/ifthenelse_true (0.00s)
    --- PASS: TestLinter/../testdata/import (0.00s)
    --- PASS: TestLinter/../testdata/import2 (0.00s)
    --- PASS: TestLinter/../testdata/import3 (0.00s)
    --- PASS: TestLinter/../testdata/import4 (0.00s)
    --- PASS: TestLinter/../testdata/import_block_literal (0.00s)
    --- PASS: TestLinter/../testdata/import_computed (0.00s)
    --- PASS: TestLinter/../testdata/import_failure_directory (0.00s)
    --- PASS: TestLinter/../testdata/import_syntax_error (0.00s)
    --- PASS: TestLinter/../testdata/import_twice (0.00s)
    --- PASS: TestLinter/../testdata/import_various_literals (0.00s)
    --- PASS: TestLinter/../testdata/importstr_block_literal (0.00s)
    --- PASS: TestLinter/../testdata/importstr_computed (0.00s)
    --- PASS: TestLinter/../testdata/in (0.00s)
    --- PASS: TestLinter/../testdata/in2 (0.00s)
    --- PASS: TestLinter/../testdata/in3 (0.00s)
    --- PASS: TestLinter/../testdata/in4 (0.00s)
    --- PASS: TestLinter/../testdata/inf_min_number (0.00s)
    --- PASS: TestLinter/../testdata/inf_mul_number (0.00s)
    --- PASS: TestLinter/../testdata/inf_sum_number (0.00s)
    --- PASS: TestLinter/../testdata/insuper (0.00s)
    --- PASS: TestLinter/../testdata/insuper2 (0.00s)
    --- PASS: TestLinter/../testdata/insuper3 (0.00s)
    --- PASS: TestLinter/../testdata/insuper4 (0.00s)
    --- PASS: TestLinter/../testdata/insuper5 (0.00s)
    --- PASS: TestLinter/../testdata/insuper6 (0.00s)
    --- PASS: TestLinter/../testdata/insuper7 (0.00s)
    --- PASS: TestLinter/../testdata/lazy (0.00s)
    --- PASS: TestLinter/../testdata/lazy_operator1 (0.00s)
    --- PASS: TestLinter/../testdata/lazy_operator2 (0.00s)
    --- PASS: TestLinter/../testdata/less (0.00s)
    --- PASS: TestLinter/../testdata/lessEq (0.00s)
    --- PASS: TestLinter/../testdata/lessEq2 (0.00s)
    --- PASS: TestLinter/../testdata/local_in_object_assertion (0.00s)
    --- PASS: TestLinter/../testdata/local_within_nested_object (0.00s)
    --- PASS: TestLinter/../testdata/local_within_object (0.00s)
    --- PASS: TestLinter/../testdata/method_call (0.00s)
    --- PASS: TestLinter/../testdata/missing_super (0.00s)
    --- PASS: TestLinter/../testdata/modulo (0.00s)
    --- PASS: TestLinter/../testdata/modulo2 (0.00s)
    --- PASS: TestLinter/../testdata/modulo3 (0.00s)
    --- PASS: TestLinter/../testdata/modulo4 (0.00s)
    --- PASS: TestLinter/../testdata/modulo5 (0.00s)
    --- PASS: TestLinter/../testdata/modulo6 (0.00s)
    --- PASS: TestLinter/../testdata/modulo7 (0.00s)
    --- PASS: TestLinter/../testdata/mult (0.00s)
    --- PASS: TestLinter/../testdata/mult2 (0.00s)
    --- PASS: TestLinter/../testdata/mult3 (0.00s)
    --- PASS: TestLinter/../testdata/multi (0.00s)
    --- PASS: TestLinter/../testdata/multi_string_output (0.00s)
    --- PASS: TestLinter/../testdata/native1 (0.00s)
    --- PASS: TestLinter/../testdata/native2 (0.00s)
    --- PASS: TestLinter/../testdata/native3 (0.00s)
    --- PASS: TestLinter/../testdata/native4 (0.00s)
    --- PASS: TestLinter/../testdata/native5 (0.00s)
    --- PASS: TestLinter/../testdata/native6 (0.00s)
    --- PASS: TestLinter/../testdata/native7 (0.00s)
    --- PASS: TestLinter/../testdata/native_error (0.00s)
    --- PASS: TestLinter/../testdata/native_nonexistent (0.00s)
    --- PASS: TestLinter/../testdata/nonexistent_import (0.00s)
    --- PASS: TestLinter/../testdata/nonexistent_import_crazy (0.00s)
    --- PASS: TestLinter/../testdata/number_divided_by_string (0.00s)
    --- PASS: TestLinter/../testdata/number_leading_zero (0.00s)
    --- PASS: TestLinter/../testdata/number_times_string (0.00s)
    --- PASS: TestLinter/../testdata/numeric_literal (0.00s)
    --- PASS: TestLinter/../testdata/obj_local_right_level (0.00s)
    --- PASS: TestLinter/../testdata/obj_local_right_level2 (0.00s)
    --- PASS: TestLinter/../testdata/obj_local_right_level3 (0.00s)
    --- PASS: TestLinter/../testdata/object (0.00s)
    --- PASS: TestLinter/../testdata/object_comp (0.00s)
    --- PASS: TestLinter/../testdata/object_comp2 (0.00s)
    --- PASS: TestLinter/../testdata/object_comp3 (0.00s)
    --- PASS: TestLinter/../testdata/object_comp4 (0.00s)
    --- PASS: TestLinter/../testdata/object_comp_assert (0.00s)
    --- PASS: TestLinter/../testdata/object_comp_bad_field (0.00s)
    --- PASS: TestLinter/../testdata/object_comp_bad_field2 (0.00s)
    --- PASS: TestLinter/../testdata/object_comp_dollar (0.00s)
    --- PASS: TestLinter/../testdata/object_comp_dollar2 (0.00s)
    --- PASS: TestLinter/../testdata/object_comp_dollar3 (0.00s)
    --- PASS: TestLinter/../testdata/object_comp_duplicate (0.00s)
    --- PASS: TestLinter/../testdata/object_comp_err_elem (0.00s)
    --- PASS: TestLinter/../testdata/object_comp_err_index (0.00s)
    --- PASS: TestLinter/../testdata/object_comp_if (0.00s)
    --- PASS: TestLinter/../testdata/object_comp_illegal (0.00s)
    --- PASS: TestLinter/../testdata/object_comp_int_index (0.00s)
    --- PASS: TestLinter/../testdata/object_comp_local (0.00s)
    --- PASS: TestLinter/../testdata/object_comp_local2 (0.00s)
    --- PASS: TestLinter/../testdata/object_comp_local3 (0.00s)
    --- PASS: TestLinter/../testdata/object_comp_super (0.00s)
    --- PASS: TestLinter/../testdata/object_hidden (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant10 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant11 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant12 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant13 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant14 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant2 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant3 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant4 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant5 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant6 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant7 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant8 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant9 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant_perf (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant_plus (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant_plus2 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant_plus3 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant_plus4 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant_plus5 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant_plus6 (0.00s)
    --- PASS: TestLinter/../testdata/object_invariant_plus7 (0.00s)
    --- PASS: TestLinter/../testdata/object_literal_in_array_comp (0.00s)
    --- PASS: TestLinter/../testdata/object_literal_in_object_comp (0.00s)
    --- PASS: TestLinter/../testdata/object_local (0.00s)
    --- PASS: TestLinter/../testdata/object_local_from_parent (0.00s)
    --- PASS: TestLinter/../testdata/object_local_from_parent_through_local (0.00s)
    --- PASS: TestLinter/../testdata/object_local_recursive (0.00s)
    --- PASS: TestLinter/../testdata/object_local_self_super (0.00s)
    --- PASS: TestLinter/../testdata/object_local_uses_local_from_outside (0.00s)
    --- PASS: TestLinter/../testdata/object_plus_bad (0.00s)
    --- PASS: TestLinter/../testdata/object_sum (0.00s)
    --- PASS: TestLinter/../testdata/object_sum2 (0.00s)
    --- PASS: TestLinter/../testdata/object_sum3 (0.00s)
    --- PASS: TestLinter/../testdata/object_super (0.00s)
    --- PASS: TestLinter/../testdata/object_super_deep (0.00s)
    --- PASS: TestLinter/../testdata/object_super_within (0.00s)
    --- PASS: TestLinter/../testdata/object_various_field_types (0.00s)
    --- PASS: TestLinter/../testdata/object_within_object (0.00s)
    --- PASS: TestLinter/../testdata/optional_args (0.00s)
    --- PASS: TestLinter/../testdata/optional_args10 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args11 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args12 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args13 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args14 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args15 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args16 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args17 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args18 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args19 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args2 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args20 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args21 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args22 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args3 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args4 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args5 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args6 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args7 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args8 (0.00s)
    --- PASS: TestLinter/../testdata/optional_args9 (0.00s)
    --- PASS: TestLinter/../testdata/or (0.00s)
    --- PASS: TestLinter/../testdata/or2 (0.00s)
    --- PASS: TestLinter/../testdata/or3 (0.00s)
    --- PASS: TestLinter/../testdata/or4 (0.00s)
    --- PASS: TestLinter/../testdata/or5 (0.00s)
    --- PASS: TestLinter/../testdata/or6 (0.00s)
    --- PASS: TestLinter/../testdata/parseJson (0.00s)
    --- PASS: TestLinter/../testdata/parseYaml (0.00s)
    --- PASS: TestLinter/../testdata/percent_bad (0.00s)
    --- PASS: TestLinter/../testdata/percent_bad2 (0.00s)
    --- PASS: TestLinter/../testdata/percent_bad3 (0.00s)
    --- PASS: TestLinter/../testdata/percent_format_float (0.00s)
    --- PASS: TestLinter/../testdata/percent_format_str (0.00s)
    --- PASS: TestLinter/../testdata/percent_format_str2 (0.00s)
    --- PASS: TestLinter/../testdata/percent_format_str3 (0.00s)
    --- PASS: TestLinter/../testdata/percent_format_str4 (0.00s)
    --- PASS: TestLinter/../testdata/percent_format_str5 (0.00s)
    --- PASS: TestLinter/../testdata/percent_format_str6 (0.00s)
    --- PASS: TestLinter/../testdata/percent_format_str7 (0.00s)
    --- PASS: TestLinter/../testdata/percent_format_str8 (0.00s)
    --- PASS: TestLinter/../testdata/percent_mod_int (0.00s)
    --- PASS: TestLinter/../testdata/percent_mod_int2 (0.00s)
    --- PASS: TestLinter/../testdata/percent_mod_int3 (0.00s)
    --- PASS: TestLinter/../testdata/percent_mod_int4 (0.00s)
    --- PASS: TestLinter/../testdata/percent_mod_int5 (0.00s)
    --- PASS: TestLinter/../testdata/percent_mod_int6 (0.00s)
    --- PASS: TestLinter/../testdata/plus (0.00s)
    --- PASS: TestLinter/../testdata/plus2 (0.00s)
    --- PASS: TestLinter/../testdata/plus3 (0.00s)
    --- PASS: TestLinter/../testdata/plus4 (0.00s)
    --- PASS: TestLinter/../testdata/plus5 (0.00s)
    --- PASS: TestLinter/../testdata/plus6 (0.00s)
    --- PASS: TestLinter/../testdata/plus7 (0.00s)
    --- PASS: TestLinter/../testdata/plus8 (0.00s)
    --- PASS: TestLinter/../testdata/plus9 (0.00s)
    --- PASS: TestLinter/../testdata/positional_after_optional (0.00s)
    --- PASS: TestLinter/../testdata/pow (0.00s)
    --- PASS: TestLinter/../testdata/pow2 (0.00s)
    --- PASS: TestLinter/../testdata/pow3 (0.00s)
    --- PASS: TestLinter/../testdata/pow4 (0.00s)
    --- PASS: TestLinter/../testdata/pow5 (0.00s)
    --- PASS: TestLinter/../testdata/pow6 (0.00s)
    --- PASS: TestLinter/../testdata/pow7 (0.00s)
    --- PASS: TestLinter/../testdata/pow8 (0.00s)
    --- PASS: TestLinter/../testdata/pow9 (0.00s)
    --- PASS: TestLinter/../testdata/proto_object_comp (0.00s)
    --- PASS: TestLinter/../testdata/recursive_local (0.00s)
    --- PASS: TestLinter/../testdata/recursive_thunk (0.00s)
    --- PASS: TestLinter/../testdata/self (0.00s)
    --- PASS: TestLinter/../testdata/simple_arith1 (0.00s)
    --- PASS: TestLinter/../testdata/simple_arith2 (0.00s)
    --- PASS: TestLinter/../testdata/simple_arith3 (0.00s)
    --- PASS: TestLinter/../testdata/simple_arith_string (0.00s)
    --- PASS: TestLinter/../testdata/simple_arith_string2 (0.00s)
    --- PASS: TestLinter/../testdata/simple_arith_string3 (0.00s)
    --- PASS: TestLinter/../testdata/simple_arith_string_empty (0.00s)
    --- PASS: TestLinter/../testdata/slice (0.00s)
    --- PASS: TestLinter/../testdata/slice2 (0.00s)
    --- PASS: TestLinter/../testdata/slice3 (0.00s)
    --- PASS: TestLinter/../testdata/slice4 (0.00s)
    --- PASS: TestLinter/../testdata/slice5 (0.00s)
    --- PASS: TestLinter/../testdata/slice6 (0.00s)
    --- PASS: TestLinter/../testdata/slice7 (0.00s)
    --- PASS: TestLinter/../testdata/stackbug-regression-test (0.00s)
    --- PASS: TestLinter/../testdata/stacktrace_assert (0.00s)
    --- PASS: TestLinter/../testdata/stacktrace_plussuper (0.00s)
    --- PASS: TestLinter/../testdata/static_error_eof (0.00s)
    --- PASS: TestLinter/../testdata/std.codepoint (0.00s)
    --- PASS: TestLinter/../testdata/std.codepoint2 (0.00s)
    --- PASS: TestLinter/../testdata/std.codepoint3 (0.00s)
    --- PASS: TestLinter/../testdata/std.codepoint4 (0.00s)
    --- PASS: TestLinter/../testdata/std.codepoint5 (0.00s)
    --- PASS: TestLinter/../testdata/std.codepoint6 (0.00s)
    --- PASS: TestLinter/../testdata/std.codepoint7 (0.00s)
    --- PASS: TestLinter/../testdata/std.codepoint8 (0.00s)
    --- PASS: TestLinter/../testdata/std.exponent (0.00s)
    --- PASS: TestLinter/../testdata/std.exponent2 (0.00s)
    --- PASS: TestLinter/../testdata/std.exponent3 (0.00s)
    --- PASS: TestLinter/../testdata/std.exponent4 (0.00s)
    --- PASS: TestLinter/../testdata/std.exponent5 (0.00s)
    --- PASS: TestLinter/../testdata/std.exponent6 (0.00s)
    --- PASS: TestLinter/../testdata/std.exponent7 (0.00s)
    --- PASS: TestLinter/../testdata/std.filter (0.00s)
    --- PASS: TestLinter/../testdata/std.filter2 (0.00s)
    --- PASS: TestLinter/../testdata/std.filter3 (0.00s)
    --- PASS: TestLinter/../testdata/std.filter4 (0.00s)
    --- PASS: TestLinter/../testdata/std.filter5 (0.00s)
    --- PASS: TestLinter/../testdata/std.filter6 (0.00s)
    --- PASS: TestLinter/../testdata/std.filter7 (0.00s)
    --- PASS: TestLinter/../testdata/std.filter8 (0.00s)
    --- PASS: TestLinter/../testdata/std.filter_swapped_args (0.00s)
    --- PASS: TestLinter/../testdata/std.flatmap (0.00s)
    --- PASS: TestLinter/../testdata/std.flatmap2 (0.00s)
    --- PASS: TestLinter/../testdata/std.flatmap3 (0.00s)
    --- PASS: TestLinter/../testdata/std.flatmap4 (0.00s)
    --- PASS: TestLinter/../testdata/std.flatmap5 (0.00s)
    --- PASS: TestLinter/../testdata/std.flatmap6 (0.00s)
    --- PASS: TestLinter/../testdata/std.join (0.00s)
    --- PASS: TestLinter/../testdata/std.join2 (0.00s)
    --- PASS: TestLinter/../testdata/std.join3 (0.00s)
    --- PASS: TestLinter/../testdata/std.join4 (0.00s)
    --- PASS: TestLinter/../testdata/std.join5 (0.00s)
    --- PASS: TestLinter/../testdata/std.join6 (0.00s)
    --- PASS: TestLinter/../testdata/std.join7 (0.00s)
    --- PASS: TestLinter/../testdata/std.join8 (0.00s)
    --- PASS: TestLinter/../testdata/std (0.00s)
    --- PASS: TestLinter/../testdata/std.length (0.00s)
    --- PASS: TestLinter/../testdata/std.length_array (0.00s)
    --- PASS: TestLinter/../testdata/std.length_function (0.00s)
    --- PASS: TestLinter/../testdata/std.length_object (0.00s)
    --- PASS: TestLinter/../testdata/std.length_object_sum (0.00s)
    --- PASS: TestLinter/../testdata/std.length_object_with_hidden (0.00s)
    --- PASS: TestLinter/../testdata/std.length_string (0.00s)
    --- PASS: TestLinter/../testdata/std.makeArray (0.00s)
    --- PASS: TestLinter/../testdata/std.makeArrayNamed (0.00s)
    --- PASS: TestLinter/../testdata/std.makeArrayNamed2 (0.00s)
    --- PASS: TestLinter/../testdata/std.makeArrayNamed3 (0.00s)
    --- PASS: TestLinter/../testdata/std.makeArrayNamed4 (0.00s)
    --- PASS: TestLinter/../testdata/std.makeArray_bad (0.00s)
    --- PASS: TestLinter/../testdata/std.makeArray_bad2 (0.00s)
    --- PASS: TestLinter/../testdata/std.makeArray_noninteger (0.00s)
    --- PASS: TestLinter/../testdata/std.makeArray_noninteger_big (0.00s)
    --- PASS: TestLinter/../testdata/std.makeArray_recursive (0.00s)
    --- PASS: TestLinter/../testdata/std.makeArray_recursive_evalutation_order_matters (0.00s)
    --- PASS: TestLinter/../testdata/std.mantissa (0.00s)
    --- PASS: TestLinter/../testdata/std.mantissa2 (0.00s)
    --- PASS: TestLinter/../testdata/std.mantissa3 (0.00s)
    --- PASS: TestLinter/../testdata/std.mantissa4 (0.00s)
    --- PASS: TestLinter/../testdata/std.mantissa5 (0.00s)
    --- PASS: TestLinter/../testdata/std.mantissa6 (0.00s)
    --- PASS: TestLinter/../testdata/std.mantissa7 (0.00s)
    --- PASS: TestLinter/../testdata/std.md5 (0.00s)
    --- PASS: TestLinter/../testdata/std.md5_2 (0.00s)
    --- PASS: TestLinter/../testdata/std.md5_3 (0.00s)
    --- PASS: TestLinter/../testdata/std.md5_4 (0.00s)
    --- PASS: TestLinter/../testdata/std.md5_5 (0.00s)
    --- PASS: TestLinter/../testdata/std.md5_6 (0.00s)
    --- PASS: TestLinter/../testdata/std.mod_int (0.00s)
    --- PASS: TestLinter/../testdata/std.mod_string (0.00s)
    --- PASS: TestLinter/../testdata/std.modulo (0.00s)
    --- PASS: TestLinter/../testdata/std.modulo2 (0.00s)
    --- PASS: TestLinter/../testdata/std.modulo3 (0.00s)
    --- PASS: TestLinter/../testdata/std.objectFields (0.00s)
    --- PASS: TestLinter/../testdata/std.objectHasEx (0.00s)
    --- PASS: TestLinter/../testdata/std.objectHasEx2 (0.00s)
    --- PASS: TestLinter/../testdata/std.objectHasEx3 (0.00s)
    --- PASS: TestLinter/../testdata/std.objectHasEx4 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals10 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals11 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals12 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals13 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals14 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals15 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals16 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals17 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals18 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals19 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals2 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals20 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals21 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals3 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals4 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals5 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals6 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals7 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals8 (0.00s)
    --- PASS: TestLinter/../testdata/std.primitiveEquals9 (0.00s)
    --- PASS: TestLinter/../testdata/std.slice (0.00s)
    --- PASS: TestLinter/../testdata/std.sort (0.00s)
    --- PASS: TestLinter/../testdata/std.sort2 (0.00s)
    --- PASS: TestLinter/../testdata/std.sort3 (0.00s)
    --- PASS: TestLinter/../testdata/std.sort4 (0.00s)
    --- PASS: TestLinter/../testdata/std.thisFile (0.00s)
    --- PASS: TestLinter/../testdata/std.thisFile2 (0.00s)
    --- PASS: TestLinter/../testdata/std.toString (0.00s)
    --- PASS: TestLinter/../testdata/std.toString2 (0.00s)
    --- PASS: TestLinter/../testdata/std.toString3 (0.00s)
    --- PASS: TestLinter/../testdata/std.toString4 (0.00s)
    --- PASS: TestLinter/../testdata/std.toString5 (0.00s)
    --- PASS: TestLinter/../testdata/std.toString6 (0.00s)
    --- PASS: TestLinter/../testdata/std.toString7 (0.00s)
    --- PASS: TestLinter/../testdata/std.toString8 (0.00s)
    --- PASS: TestLinter/../testdata/std_in_local (0.00s)
    --- PASS: TestLinter/../testdata/std_substr (0.00s)
    --- PASS: TestLinter/../testdata/stdlib_smoke_test (0.00s)
    --- PASS: TestLinter/../testdata/strReplace (0.00s)
    --- PASS: TestLinter/../testdata/strReplace2 (0.00s)
    --- PASS: TestLinter/../testdata/strReplace3 (0.00s)
    --- PASS: TestLinter/../testdata/string (0.00s)
    --- PASS: TestLinter/../testdata/string2 (0.00s)
    --- PASS: TestLinter/../testdata/string_comparison1 (0.00s)
    --- PASS: TestLinter/../testdata/string_comparison2 (0.00s)
    --- PASS: TestLinter/../testdata/string_comparison3 (0.00s)
    --- PASS: TestLinter/../testdata/string_comparison4 (0.00s)
    --- PASS: TestLinter/../testdata/string_comparison5 (0.00s)
    --- PASS: TestLinter/../testdata/string_comparison6 (0.00s)
    --- PASS: TestLinter/../testdata/string_comparison7 (0.00s)
    --- PASS: TestLinter/../testdata/string_divided_by_number (0.00s)
    --- PASS: TestLinter/../testdata/string_index (0.00s)
    --- PASS: TestLinter/../testdata/string_index2 (0.00s)
    --- PASS: TestLinter/../testdata/string_index_negative (0.00s)
    --- PASS: TestLinter/../testdata/string_index_out_of_bounds (0.00s)
    --- PASS: TestLinter/../testdata/string_minus_number (0.00s)
    --- PASS: TestLinter/../testdata/string_plus_function (0.00s)
    --- PASS: TestLinter/../testdata/string_times_number (0.00s)
    --- PASS: TestLinter/../testdata/string_to_bool (0.00s)
    --- PASS: TestLinter/../testdata/supersugar (0.00s)
    --- PASS: TestLinter/../testdata/supersugar2 (0.00s)
    --- PASS: TestLinter/../testdata/supersugar3 (0.00s)
    --- PASS: TestLinter/../testdata/supersugar4 (0.00s)
    --- PASS: TestLinter/../testdata/supersugar5 (0.00s)
    --- PASS: TestLinter/../testdata/supersugar6 (0.00s)
    --- PASS: TestLinter/../testdata/supersugar7 (0.00s)
    --- PASS: TestLinter/../testdata/supersugar8 (0.00s)
    --- PASS: TestLinter/../testdata/supersugar9 (0.00s)
    --- PASS: TestLinter/../testdata/syntax_error (0.00s)
    --- PASS: TestLinter/../testdata/tailstrict (0.00s)
    --- PASS: TestLinter/../testdata/tailstrict2 (0.00s)
    --- PASS: TestLinter/../testdata/tailstrict3 (0.00s)
    --- PASS: TestLinter/../testdata/tailstrict4 (0.00s)
    --- PASS: TestLinter/../testdata/tailstrict5 (0.00s)
    --- PASS: TestLinter/../testdata/tailstrict_operator1 (0.00s)
    --- PASS: TestLinter/../testdata/tailstrict_operator2 (0.00s)
    --- PASS: TestLinter/../testdata/tailstrict_operator3 (0.00s)
    --- PASS: TestLinter/../testdata/too_many_arguments (0.00s)
    --- PASS: TestLinter/../testdata/true (0.00s)
    --- PASS: TestLinter/../testdata/type_array (0.00s)
    --- PASS: TestLinter/../testdata/type_builtin_function (0.00s)
    --- PASS: TestLinter/../testdata/type_error (0.00s)
    --- PASS: TestLinter/../testdata/type_function (0.00s)
    --- PASS: TestLinter/../testdata/type_number (0.00s)
    --- PASS: TestLinter/../testdata/type_object (0.00s)
    --- PASS: TestLinter/../testdata/type_string (0.00s)
    --- PASS: TestLinter/../testdata/unary_minus (0.00s)
    --- PASS: TestLinter/../testdata/unary_minus2 (0.00s)
    --- PASS: TestLinter/../testdata/unary_minus3 (0.00s)
    --- PASS: TestLinter/../testdata/unary_minus4 (0.00s)
    --- PASS: TestLinter/../testdata/unary_object (0.00s)
    --- PASS: TestLinter/../testdata/unfinished_args (0.00s)
    --- PASS: TestLinter/../testdata/unicode (0.00s)
    --- PASS: TestLinter/../testdata/unicode2 (0.00s)
    --- PASS: TestLinter/../testdata/use_object (0.00s)
    --- PASS: TestLinter/../testdata/use_object_in_object (0.00s)
    --- PASS: TestLinter/../testdata/variable (0.00s)
    --- PASS: TestLinter/../testdata/variable_not_visible (0.00s)
    --- PASS: TestLinter/../testdata/verbatim_string (0.00s)
    --- PASS: TestLinter/passing_multiple_input_files (8.93s)
PASS
ok      github.com/google/go-jsonnet/linter 9.163s

I would expect it to run about as fast as when running each file individually (actually there is room for optimization and avoiding common work).

lvisterin commented 1 year ago

I'm running into this issue where I'm trying to lint a large amount of files and it is so slow that it is unpleasant to integrate in my development flow.

I noticed using xargs with parallelism is way faster than passing all the files in one jsonnet-lint invocation.

There's definitely low hanging fruit for optimization here. I noticed in the code it is looping over every input file so this could at least by parallelized by the tool itself.

In the mean time, here is my ugly command:

find -name '*.libsonnet' ! -path './vendor/*' -print0 | xargs -0 -t -I% -P$(nproc) jsonnet-lint -J vendor %
netomi commented 1 year ago

When running all tests together, all root nodes are collected for all nodes at first. Then when evaluating each node individually, the type check mechanism takes all roots into account, although they are mostly unnecessary.

Moving the part of collecting the root nodes into the main evaluating loop, results in the multiple tests running as fast as expected (0.24s in my case)

diff --git a/linter/linter.go b/linter/linter.go
index 1437ba1..f99768f 100644
--- a/linter/linter.go
+++ b/linter/linter.go
@@ -45,14 +45,6 @@ type nodeWithLocation struct {

 // Lint analyses a node and reports any issues it encounters to an error writer.
 func lint(vm *jsonnet.VM, nodes []nodeWithLocation, errWriter *ErrorWriter) {
-       roots := make(map[string]ast.Node)
-       for _, node := range nodes {
-               roots[node.path] = node.node
-       }
-       for _, node := range nodes {
-               getImports(vm, node, roots, errWriter)
-       }
-
        variablesInFile := make(map[string]common.VariableInfo)

        std := common.Variable{
@@ -65,16 +57,20 @@ func lint(vm *jsonnet.VM, nodes []nodeWithLocation, errWriter *ErrorWriter) {
                return variables.FindVariables(node.node, variables.Environment{"std": &std, "$std": &std})
        }

-       for importedPath, rootNode := range roots {
-               variablesInFile[importedPath] = *findVariables(nodeWithLocation{rootNode, importedPath})
-       }
+       for _, node := range nodes {
+               roots := make(map[string]ast.Node)
+               roots[node.path] = node.node
+               getImports(vm, node, roots, errWriter)

-       vars := make(map[string]map[ast.Node]*common.Variable)
-       for importedPath, info := range variablesInFile {
-               vars[importedPath] = info.VarAt
-       }
+               for importedPath, rootNode := range roots {
+                       variablesInFile[importedPath] = *findVariables(nodeWithLocation{rootNode, importedPath})
+               }
+
+               vars := make(map[string]map[ast.Node]*common.Variable)
+               for importedPath, info := range variablesInFile {
+                       vars[importedPath] = info.VarAt
+               }

-       for _, node := range nodes {
                variableInfo := findVariables(node)

                for _, v := range variableInfo.Variables {
=== RUN   TestLinter
--- PASS: TestLinter (0.24s)
=== RUN   TestLinter/passing_multiple_input_files
    --- PASS: TestLinter/passing_multiple_input_files (0.23s)
PASS