biome-report-example.json
1 { 2 "metadata": { 3 "timestamp": "2025-05-10T12:34:56.789Z", 4 "tool": "Biome", 5 "version": "1.9.4" 6 }, 7 "summary": { 8 "total_files": 120, 9 "files_with_issues": 15, 10 "total_errors": 5, 11 "total_warnings": 42, 12 "total_hints": 18 13 }, 14 "files": [ 15 { 16 "path": "app/services/video/switcher.js", 17 "errors": [ 18 { 19 "rule": "noUndeclaredVariables", 20 "message": "Variable \"videoElement\" is not declared", 21 "location": { 22 "start_line": 45, 23 "start_column": 10, 24 "end_line": 45, 25 "end_column": 22 26 }, 27 "code_snippet": " const videoElement = document.getElementById('video-player');" 28 } 29 ], 30 "warnings": [ 31 { 32 "rule": "noConsoleLog", 33 "message": "Using console.log is not allowed", 34 "location": { 35 "start_line": 78, 36 "start_column": 4, 37 "end_line": 78, 38 "end_column": 15 39 }, 40 "code_snippet": " console.log('Video source changed');" 41 }, 42 { 43 "rule": "noVoid", 44 "message": "void operator is not allowed", 45 "location": { 46 "start_line": 92, 47 "start_column": 4, 48 "end_line": 92, 49 "end_column": 9 50 }, 51 "code_snippet": " void this.videoElement.load();" 52 } 53 ], 54 "hints": [] 55 }, 56 { 57 "path": "app/utils/animation/icon-animation.js", 58 "errors": [], 59 "warnings": [ 60 { 61 "rule": "noDoubleEquals", 62 "message": "Use '===' instead of '=='", 63 "location": { 64 "start_line": 37, 65 "start_column": 15, 66 "end_line": 37, 67 "end_column": 17 68 }, 69 "code_snippet": " if (type == 'error') {" 70 }, 71 { 72 "rule": "useConst", 73 "message": "Use 'const' instead of 'let' for variables that are never reassigned", 74 "location": { 75 "start_line": 42, 76 "start_column": 8, 77 "end_line": 42, 78 "end_column": 11 79 }, 80 "code_snippet": " let iconUrl = AppConstants.ICONS[iconName];" 81 } 82 ], 83 "hints": [ 84 { 85 "rule": "useTemplate", 86 "message": "Use template literals instead of string concatenation", 87 "location": { 88 "start_line": 55, 89 "start_column": 18, 90 "end_line": 55, 91 "end_column": 19 92 }, 93 "code_snippet": " return 'icon-' + type;" 94 } 95 ] 96 }, 97 { 98 "path": "app/ui/stats-ui-manager.js", 99 "errors": [], 100 "warnings": [ 101 { 102 "rule": "noAccumulatingSpread", 103 "message": "Accumulating spread operations in array or object literals is not allowed", 104 "location": { 105 "start_line": 7, 106 "start_column": 28, 107 "end_line": 7, 108 "end_column": 31 109 }, 110 "code_snippet": " const sourceElements = [...this.videoController.videoElement.querySelectorAll('source')];" 111 } 112 ], 113 "hints": [] 114 } 115 ] 116 }