Browse Source

Updated linter

maziggy 4 months ago
parent
commit
b95d0113ac

+ 34 - 0
frontend/eslint.config.js

@@ -19,5 +19,39 @@ export default defineConfig([
       ecmaVersion: 2020,
       globals: globals.browser,
     },
+    rules: {
+      // Keep core React Hooks rules
+      'react-hooks/rules-of-hooks': 'error',
+      'react-hooks/exhaustive-deps': 'warn',
+      // Disable React Compiler rules (too strict for non-compiler codebases)
+      'react-hooks/static-components': 'off',
+      'react-hooks/set-state-in-effect': 'off',
+      'react-hooks/purity': 'off',
+      'react-hooks/immutability': 'off',
+      'react-hooks/preserve-manual-memoization': 'off',
+      'react-hooks/refs': 'off',
+    },
+  },
+  // Relaxed rules for test files
+  {
+    files: ['**/__tests__/**/*.{ts,tsx}', '**/*.test.{ts,tsx}', '**/*.spec.{ts,tsx}'],
+    rules: {
+      '@typescript-eslint/no-explicit-any': 'off',
+      '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }],
+      'react-refresh/only-export-components': 'off',
+    },
+  },
+  // Files that legitimately export non-components (contexts, hooks, utilities)
+  {
+    files: [
+      '**/contexts/**/*.{ts,tsx}',
+      '**/hooks/**/*.{ts,tsx}',
+      '**/components/IconPicker.tsx',
+      '**/components/Layout.tsx',
+      '**/components/HMSErrorModal.tsx',
+    ],
+    rules: {
+      'react-refresh/only-export-components': 'off',
+    },
   },
 ])

+ 1 - 1
frontend/src/components/ModelViewer.tsx

@@ -162,7 +162,7 @@ async function parse3MF(arrayBuffer: ArrayBuffer): Promise<{ objects: Map<string
           }
         }
       }
-    } catch (e) {
+    } catch {
       // Silently ignore model_settings.config parsing errors
     }
   }

+ 2 - 2
frontend/src/pages/ArchivesPage.tsx

@@ -2130,7 +2130,7 @@ export function ArchivesPage() {
                       a.click();
                       URL.revokeObjectURL(url);
                       showToast('Export downloaded');
-                    } catch (err) {
+                    } catch {
                       showToast('Export failed', 'error');
                     } finally {
                       setIsExporting(false);
@@ -2159,7 +2159,7 @@ export function ArchivesPage() {
                       a.click();
                       URL.revokeObjectURL(url);
                       showToast('Export downloaded');
-                    } catch (err) {
+                    } catch {
                       showToast('Export failed', 'error');
                     } finally {
                       setIsExporting(false);

+ 1 - 1
frontend/src/pages/PrintersPage.tsx

@@ -2857,7 +2857,7 @@ function AddPrinterModal({
           clearInterval(pollInterval);
           try {
             await discoveryApi.stopDiscovery();
-          } catch (e) {
+          } catch {
             // Ignore stop errors
           }
           setDiscovering(false);

+ 1 - 1
frontend/src/pages/SettingsPage.tsx

@@ -2214,7 +2214,7 @@ export function SettingsPage() {
               a.click();
               URL.revokeObjectURL(url);
               showToast(t('backup.downloaded', { defaultValue: 'Backup downloaded' }), 'success');
-            } catch (err) {
+            } catch {
               // Dismiss loading toast on error
               if (includesArchives) {
                 dismissToast(toastId);

+ 1 - 1
frontend/src/pages/StatsPage.tsx

@@ -452,7 +452,7 @@ export function StatsPage() {
       a.click();
       URL.revokeObjectURL(url);
       showToast('Export downloaded');
-    } catch (err) {
+    } catch {
       showToast('Export failed', 'error');
     } finally {
       setIsExporting(false);