diff --git a/.eslintrc.js b/.eslintrc.js index 9ba7d4cc..d5873c77 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,4 +1,3 @@ -// eslint-disable-next-line no-undef module.exports = { env: { browser: true, @@ -7,7 +6,7 @@ module.exports = { extends: [ 'standard', 'eslint:recommended', - // 'plugin:@eslint-community/eslint-comments/recommended', + 'plugin:@eslint-community/eslint-comments/recommended', // 'plugin:@typescript-eslint/recommended', // 'plugin:import/recommended', // 'plugin:import/typescript', @@ -56,9 +55,9 @@ module.exports = { // ignores: ['+Page'], // }, // ], - // // Optional eslint-comments rule - // '@eslint-community/eslint-comments/no-unused-disable': 'error', - // '@eslint-community/eslint-comments/disable-enable-pair': ['error', { allowWholeFile: true }], + // Optional eslint-comments rule + '@eslint-community/eslint-comments/no-unused-disable': 'error', + '@eslint-community/eslint-comments/disable-enable-pair': ['error', { allowWholeFile: true }], // // import // 'import/export': 'error', // 'import/no-deprecated': 'error', diff --git a/package-lock.json b/package-lock.json index 6b861ac4..eeeb13f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,6 +30,7 @@ "tw-elements": "^1.0.0" }, "devDependencies": { + "@eslint-community/eslint-plugin-eslint-comments": "^4.4.1", "@types/leaflet": "^1.7.11", "@types/react": "^18.2.0", "@types/react-dom": "^18.0.5", @@ -71,6 +72,39 @@ "node": ">=0.10.0" } }, + "node_modules/@eslint-community/eslint-plugin-eslint-comments": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-4.4.1.tgz", + "integrity": "sha512-lb/Z/MzbTf7CaVYM9WCFNQZ4L1yi3ev2fsFPF99h31ljhSEyUoyEsKsNWiU+qD1glbYTDJdqgyaLKtyTkkqtuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^4.0.0", + "ignore": "^5.2.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/@eslint-community/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", diff --git a/package.json b/package.json index ecf7ffd5..833a6fd2 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "author": "Anton Tranelis", "license": "MIT", "devDependencies": { + "@eslint-community/eslint-plugin-eslint-comments": "^4.4.1", "@types/leaflet": "^1.7.11", "@types/react": "^18.2.0", "@types/react-dom": "^18.0.5", diff --git a/postcss.config.js b/postcss.config.js index 3b33f365..33ad091d 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,4 +1,3 @@ -// eslint-disable-next-line no-undef module.exports = { plugins: { tailwindcss: {}, diff --git a/src/Components/AppShell/hooks/useAssets.tsx b/src/Components/AppShell/hooks/useAssets.tsx index 573d8930..c3e4465e 100644 --- a/src/Components/AppShell/hooks/useAssets.tsx +++ b/src/Components/AppShell/hooks/useAssets.tsx @@ -12,7 +12,6 @@ const AssetContext = createContext({ function useAssetsManager(): { api: AssetsApi - // eslint-disable-next-line no-unused-vars setAssetsApi: (api: AssetsApi) => void } { const [api, setApi] = useState({} as AssetsApi) diff --git a/src/Components/Auth/useAuth.tsx b/src/Components/Auth/useAuth.tsx index 8be9b9ae..f5a1cfeb 100644 --- a/src/Components/Auth/useAuth.tsx +++ b/src/Components/Auth/useAuth.tsx @@ -16,18 +16,13 @@ type AuthCredentials = { type AuthContextProps = { isAuthenticated: boolean user: UserItem | null - // eslint-disable-next-line no-unused-vars login: (credentials: AuthCredentials) => Promise - // eslint-disable-next-line no-unused-vars register: (credentials: AuthCredentials, userName: string) => Promise loading: boolean logout: () => Promise - // eslint-disable-next-line no-unused-vars updateUser: (user: UserItem) => any token: string | null - // eslint-disable-next-line no-unused-vars requestPasswordReset: (email: string, reset_url: string) => Promise - // eslint-disable-next-line no-unused-vars passwordReset: (token: string, new_password: string) => Promise } @@ -111,7 +106,6 @@ export const AuthProvider = ({ userApi, children }: AuthProviderProps) => { const updateUser = async (user: UserItem) => { setLoading(true) - // eslint-disable-next-line no-unused-vars const { id, ...userRest } = user try { diff --git a/src/Components/Gaming/hooks/useQuests.tsx b/src/Components/Gaming/hooks/useQuests.tsx index 6287126f..17e4323f 100644 --- a/src/Components/Gaming/hooks/useQuests.tsx +++ b/src/Components/Gaming/hooks/useQuests.tsx @@ -10,7 +10,6 @@ const QuestContext = createContext({ function useQuestsManager(initialOpen: boolean): { open: boolean - // eslint-disable-next-line no-unused-vars setQuestsOpen: (open: boolean) => void } { const [open, setOpen] = useState(initialOpen) diff --git a/src/Components/Input/Autocomplete.tsx b/src/Components/Input/Autocomplete.tsx index 4bf4668c..ce25467a 100644 --- a/src/Components/Input/Autocomplete.tsx +++ b/src/Components/Input/Autocomplete.tsx @@ -2,7 +2,6 @@ import * as React from 'react' import { useEffect } from 'react' import { TagView } from '../Templates/TagView' -// eslint-disable-next-line no-unused-vars export const Autocomplete = ({ inputProps, suggestions, diff --git a/src/Components/Input/ComboBoxInput.tsx b/src/Components/Input/ComboBoxInput.tsx index 558d2e65..91b49d88 100644 --- a/src/Components/Input/ComboBoxInput.tsx +++ b/src/Components/Input/ComboBoxInput.tsx @@ -5,7 +5,6 @@ interface ComboBoxProps { id?: string options: { value: string; label: string }[] value: string - // eslint-disable-next-line no-unused-vars onValueChange: (newValue: string) => void } diff --git a/src/Components/Input/SelectBox.tsx b/src/Components/Input/SelectBox.tsx index f7bed383..4bcf3a09 100644 --- a/src/Components/Input/SelectBox.tsx +++ b/src/Components/Input/SelectBox.tsx @@ -9,7 +9,7 @@ type SelectBoxProps = { containerStyle?: string defaultValue: string placeholder?: string - // eslint-disable-next-line no-unused-vars + updateFormValue: (value: string) => void options: { name: string; value: string }[] diff --git a/src/Components/Input/TextAreaInput.tsx b/src/Components/Input/TextAreaInput.tsx index 09577cff..fc66f731 100644 --- a/src/Components/Input/TextAreaInput.tsx +++ b/src/Components/Input/TextAreaInput.tsx @@ -11,7 +11,6 @@ type TextAreaProps = { inputStyle?: string defaultValue: string placeholder?: string - // eslint-disable-next-line no-unused-vars updateFormValue?: (value: string) => void } diff --git a/src/Components/Input/TextInput.tsx b/src/Components/Input/TextInput.tsx index 2888a880..2c1248d3 100644 --- a/src/Components/Input/TextInput.tsx +++ b/src/Components/Input/TextInput.tsx @@ -11,7 +11,6 @@ type InputTextProps = { defaultValue?: string placeholder?: string autocomplete?: string - // eslint-disable-next-line no-unused-vars updateFormValue?: (value: string) => void } diff --git a/src/Components/Map/Subcomponents/ItemPopupComponents/PopupStartEndInput.tsx b/src/Components/Map/Subcomponents/ItemPopupComponents/PopupStartEndInput.tsx index e3a22242..4a728ee0 100644 --- a/src/Components/Map/Subcomponents/ItemPopupComponents/PopupStartEndInput.tsx +++ b/src/Components/Map/Subcomponents/ItemPopupComponents/PopupStartEndInput.tsx @@ -5,9 +5,7 @@ import { Item } from '../../../../types' type StartEndInputProps = { item?: Item showLabels?: boolean - // eslint-disable-next-line no-unused-vars updateStartValue?: (value: string) => void - // eslint-disable-next-line no-unused-vars updateEndValue?: (value: string) => void } diff --git a/src/Components/Map/Subcomponents/ItemPopupComponents/TextView.tsx b/src/Components/Map/Subcomponents/ItemPopupComponents/TextView.tsx index 55194681..fb749735 100644 --- a/src/Components/Map/Subcomponents/ItemPopupComponents/TextView.tsx +++ b/src/Components/Map/Subcomponents/ItemPopupComponents/TextView.tsx @@ -38,18 +38,18 @@ export const TextView = ({ if (item && text) replacedText = fixUrls(text) - // eslint-disable-next-line no-useless-escape if (replacedText) { replacedText = replacedText.replace(/(? { let shortUrl = url - // eslint-disable-next-line no-useless-escape + if (url.match('^https://')) { shortUrl = url.split('https://')[1] } - // eslint-disable-next-line no-useless-escape + if (url.match('^http://')) { shortUrl = url.split('http://')[1] } + return `[${shortUrl}](${url})` }) } diff --git a/src/Components/Map/hooks/useFilter.tsx b/src/Components/Map/hooks/useFilter.tsx index dc5b7c3e..6d1eb765 100644 --- a/src/Components/Map/hooks/useFilter.tsx +++ b/src/Components/Map/hooks/useFilter.tsx @@ -32,7 +32,6 @@ const FilterContext = createContext({ toggleVisibleLayer: () => {}, resetVisibleLayers: () => {}, isLayerVisible: () => true, - addVisibleGroupType: () => {}, toggleVisibleGroupType: () => {}, isGroupTypeVisible: () => true, @@ -43,25 +42,17 @@ function useFilterManager(initialTags: Tag[]): { searchPhrase: string visibleLayers: LayerProps[] visibleGroupTypes: string[] - // eslint-disable-next-line no-unused-vars + addFilterTag: (tag: Tag) => void - // eslint-disable-next-line no-unused-vars removeFilterTag: (name: string) => void resetFilterTags: () => void - // eslint-disable-next-line no-unused-vars setSearchPhrase: (phrase: string) => void - // eslint-disable-next-line no-unused-vars addVisibleLayer: (layer: LayerProps) => void - // eslint-disable-next-line no-unused-vars toggleVisibleLayer: (layer: LayerProps) => void resetVisibleLayers: () => void - // eslint-disable-next-line no-unused-vars isLayerVisible: (layer: LayerProps) => boolean - // eslint-disable-next-line no-unused-vars addVisibleGroupType: (groupType: string) => void - // eslint-disable-next-line no-unused-vars toggleVisibleGroupType: (groupType: string) => void - // eslint-disable-next-line no-unused-vars isGroupTypeVisible: (groupType: string) => boolean } { const [filterTags, dispatchTags] = useReducer((state: Tag[], action: ActionType) => { diff --git a/src/Components/Map/hooks/useItems.tsx b/src/Components/Map/hooks/useItems.tsx index 43ed380c..0b75cf86 100644 --- a/src/Components/Map/hooks/useItems.tsx +++ b/src/Components/Map/hooks/useItems.tsx @@ -25,17 +25,11 @@ const ItemContext = createContext({ function useItemsManager(initialItems: Item[]): { items: Item[] - // eslint-disable-next-line no-unused-vars addItem: (item: Item) => void - // eslint-disable-next-line no-unused-vars updateItem: (item: Item) => void - // eslint-disable-next-line no-unused-vars removeItem: (item: Item) => void - // eslint-disable-next-line no-unused-vars resetItems: (layer: LayerProps) => void - // eslint-disable-next-line no-unused-vars setItemsApi: (layer: LayerProps) => void - // eslint-disable-next-line no-unused-vars setItemsData: (layer: LayerProps) => void allItemsLoaded: boolean } { diff --git a/src/Components/Map/hooks/useLayers.tsx b/src/Components/Map/hooks/useLayers.tsx index 79c29888..d37197a7 100644 --- a/src/Components/Map/hooks/useLayers.tsx +++ b/src/Components/Map/hooks/useLayers.tsx @@ -13,7 +13,6 @@ const LayerContext = createContext({ function useLayerManager(initialLayers: LayerProps[]): { layers: LayerProps[] - // eslint-disable-next-line no-unused-vars addLayer: (layer: LayerProps) => void } { const [layers, dispatch] = useReducer((state: LayerProps[], action: ActionType) => { diff --git a/src/Components/Map/hooks/useLeafletRefs.tsx b/src/Components/Map/hooks/useLeafletRefs.tsx index d964e14b..73c7a4a8 100644 --- a/src/Components/Map/hooks/useLeafletRefs.tsx +++ b/src/Components/Map/hooks/useLeafletRefs.tsx @@ -23,9 +23,7 @@ const LeafletRefsContext = createContext({ function useLeafletRefsManager(initialLeafletRefs: {}): { leafletRefs: Record - // eslint-disable-next-line no-unused-vars addMarker: (item: Item, marker: Marker) => void - // eslint-disable-next-line no-unused-vars addPopup: (item: Item, popup: Popup) => void } { const [leafletRefs, dispatch] = useReducer( diff --git a/src/Components/Map/hooks/usePermissions.tsx b/src/Components/Map/hooks/usePermissions.tsx index b565e129..e9cbbe7c 100644 --- a/src/Components/Map/hooks/usePermissions.tsx +++ b/src/Components/Map/hooks/usePermissions.tsx @@ -17,13 +17,9 @@ const PermissionContext = createContext({ function usePermissionsManager(initialPermissions: Permission[]): { permissions: Permission[] - // eslint-disable-next-line no-unused-vars setPermissionApi: (api: ItemsApi) => void - // eslint-disable-next-line no-unused-vars setPermissionData: (data: Permission[]) => void - // eslint-disable-next-line no-unused-vars setAdminRole: (adminRole: string) => void - // eslint-disable-next-line no-unused-vars hasUserPermission: ( collectionName: string, action: PermissionAction, diff --git a/src/Components/Map/hooks/useTags.tsx b/src/Components/Map/hooks/useTags.tsx index 88d06a47..06002842 100644 --- a/src/Components/Map/hooks/useTags.tsx +++ b/src/Components/Map/hooks/useTags.tsx @@ -1,4 +1,3 @@ -/* eslint-disable no-unused-vars */ import { useCallback, useReducer, createContext, useContext, useState } from 'react' import * as React from 'react' import { Item, ItemsApi, Tag } from '../../../types' diff --git a/src/Components/Profile/Templates/TabsForm.tsx b/src/Components/Profile/Templates/TabsForm.tsx index 5b19afb2..38f47a8e 100644 --- a/src/Components/Profile/Templates/TabsForm.tsx +++ b/src/Components/Profile/Templates/TabsForm.tsx @@ -8,7 +8,6 @@ import { TagsWidget } from '../Subcomponents/TagsWidget' import { useNavigate } from 'react-router-dom' import { useUpdateItem } from '../../Map/hooks/useItems' -// eslint-disable-next-line react/prop-types export const TabsForm = ({ item, state, diff --git a/src/Components/Profile/Templates/TabsView.tsx b/src/Components/Profile/Templates/TabsView.tsx index d80736f1..2f3276af 100644 --- a/src/Components/Profile/Templates/TabsView.tsx +++ b/src/Components/Profile/Templates/TabsView.tsx @@ -10,7 +10,6 @@ import { useItems } from '../../Map/hooks/useItems' import { useAssetApi } from '../../AppShell/hooks/useAssets' import { timeAgo } from '../../../Utils/TimeAgo' -// eslint-disable-next-line no-unused-vars export const TabsView = ({ attestations, userType, diff --git a/src/Utils/ReplaceURLs.ts b/src/Utils/ReplaceURLs.ts index 04436dbe..9d6be119 100644 --- a/src/Utils/ReplaceURLs.ts +++ b/src/Utils/ReplaceURLs.ts @@ -6,7 +6,7 @@ export const mailRegex = /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/gi export function fixUrls(message: string): string { message = message.replace(urlRegex, function (url) { let hyperlink = url.replace(' ', '') - // eslint-disable-next-line no-useless-escape + if (!hyperlink.match('^https?://')) { hyperlink = 'https://' + hyperlink } diff --git a/src/types.ts b/src/types.ts index c51d3bf9..26038fe5 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,5 +1,3 @@ -/* eslint-disable no-unused-vars */ - import * as React from 'react' import { ItemFormPopupProps } from './Components/Map/Subcomponents/ItemFormPopup' diff --git a/tailwind.config.js b/tailwind.config.js index c93ddc32..37d47197 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ /** @type {import('tailwindcss').Config} */ module.exports = { content: ['./src/**/*.{js,jsx,ts,tsx}', './node_modules/tw-elements/dist/js/**/*.js'],