Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Standardize imports #2477

Draft
wants to merge 37 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
40d96c0
Install ESLint plugin
RichDom2185 May 12, 2023
ff6f9d3
Use JS file for .eslintrc
RichDom2185 May 12, 2023
4fc7955
Enforce relative imports for non-test files
RichDom2185 May 12, 2023
9296077
Reformat files affected by ESLint rule change
RichDom2185 May 12, 2023
f81912f
Reformat files using Prettier
RichDom2185 May 12, 2023
b3ce480
Merge branch 'master' into 23-summer/standardize-imports
RichDom2185 May 13, 2023
7b65300
Merge branch 'master' into 23-summer/standardize-imports
RichDom2185 May 16, 2023
2a883fc
Merge branch 'master' into 23-summer/standardize-imports
RichDom2185 May 18, 2023
33c463a
Merge branch 'master' into 23-summer/standardize-imports
RichDom2185 May 18, 2023
89cd1ba
Merge branch 'master' into 23-summer/standardize-imports
RichDom2185 May 23, 2023
4391374
Merge branch 'master' of https://github.com/RichDom2185/source-academ…
RichDom2185 May 25, 2023
e3bf8de
Merge branch 'master' of https://github.com/RichDom2185/source-academ…
RichDom2185 May 25, 2023
9573aa0
Merge branch 'master' of https://github.com/RichDom2185/source-academ…
RichDom2185 Jun 6, 2023
30bf589
Reformat files post-merge
RichDom2185 Jun 6, 2023
e6d34ca
Merge branch 'master' into 23-summer/standardize-imports
RichDom2185 Jun 9, 2023
f22947c
Merge branch 'master' of https://github.com/RichDom2185/source-academ…
RichDom2185 Jun 14, 2023
00b6ea7
Reformat files post-merge
RichDom2185 Jun 14, 2023
e16a483
Merge branch 'master' of https://github.com/RichDom2185/source-academ…
RichDom2185 Jun 16, 2023
bbeac4f
Fix import post-merge
RichDom2185 Jun 16, 2023
849109f
Merge branch 'master' of https://github.com/RichDom2185/source-academ…
RichDom2185 Jun 19, 2023
a0bf2ac
Reformat imports post-merge
RichDom2185 Jun 19, 2023
40371e8
Remove unused import
RichDom2185 Jun 19, 2023
92c2161
Merge branch 'master' of https://github.com/RichDom2185/source-academ…
RichDom2185 Jun 20, 2023
fe8f660
Reformat imports post-merge
RichDom2185 Jun 20, 2023
f4cc673
Merge branch 'master' of https://github.com/RichDom2185/source-academ…
RichDom2185 Jun 20, 2023
195d484
Reformat imports post-merge
RichDom2185 Jun 20, 2023
a3395ff
Merge branch 'master' of https://github.com/RichDom2185/source-academ…
RichDom2185 Jun 21, 2023
9d1ef24
Merge branch 'master' of https://github.com/RichDom2185/source-academ…
RichDom2185 Jun 22, 2023
9f30767
Reformat imports post-merge
RichDom2185 Jun 22, 2023
fad20dd
Merge branch 'master' of https://github.com/RichDom2185/source-academ…
RichDom2185 Jul 29, 2023
4e106ee
Reformat imports post-merge
RichDom2185 Jul 29, 2023
04f7c44
Merge branch 'master' of https://github.com/RichDom2185/source-academ…
RichDom2185 Aug 4, 2023
ffef557
Reformat imports post-merge
RichDom2185 Aug 4, 2023
4ece47c
Merge branch 'master' of https://github.com/RichDom2185/source-academ…
RichDom2185 Aug 6, 2023
dfbc6de
Reformat imports post-merge
RichDom2185 Aug 6, 2023
f43ac9e
Merge branch 'master' of https://github.com/RichDom2185/source-academ…
RichDom2185 Sep 17, 2023
5c28f5a
Reformat imports post-merge
RichDom2185 Sep 17, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
26 changes: 26 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
module.exports = {
extends: ['react-app', 'plugin:@typescript-eslint/recommended'],
plugins: ['no-relative-import-paths', 'simple-import-sort'],
rules: {
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/camelcase': 'off',
'@typescript-eslint/no-inferrable-types': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/ban-ts-comment': 'warn',
'@typescript-eslint/ban-types': 'off',
'no-relative-import-paths/no-relative-import-paths': ['error', { allowSameFolder: true }],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Motivation: Copied over from their own documentation

Moving a file to different folder, could result in changing all imports statement in that file. This will not happen is the import paths are absolute.

Also, the current way of importing leads to stuff like

import { a } from 'src/.../file'

import { b } from '../file'

Even though a and b are defined in the same file, which does not really look nice at best and potentially misleading at worst.

Hmm, given the motivation for this change, is there a reason why the allowSameFolder option is set to true? More specifically, why are relative import paths for imported files from the same folder allowed? Moving a file containing such relative import paths will result in these import statements changing.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking that it might encourage better organisation of code (e.g perhaps splitting a 1000+ line component into multiple files in the same folder, where applicable). Since this makes the distinction clear (whether the files are closely related or not), this might improve readability.

What do you think?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No strong preferences! Just wanted to know if there was a rationale (which you do have) because it would be good to state it somewhere for future reference.

'simple-import-sort/imports': 'error'
},
overrides: [
{
files: ['*.ts', '*.tsx', '*.js', '*.jsx'].map(filename => `**/__tests__/**/${filename}`),
rules: {
'no-relative-import-paths/no-relative-import-paths': 'off'
}
}
]
};
17 changes: 0 additions & 17 deletions .eslintrc.json

This file was deleted.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@
"constants-browserify": "^1.0.0",
"coveralls": "^3.1.1",
"cross-env": "^7.0.3",
"eslint-plugin-no-relative-import-paths": "^1.5.2",
"eslint-plugin-simple-import-sort": "^7.0.0",
"https-browserify": "^1.0.0",
"husky": "^8.0.2",
Expand Down
8 changes: 4 additions & 4 deletions src/commons/XMLParser/XMLParserHelper.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import { Chapter } from 'js-slang/dist/types';
import { Builder } from 'xml2js';

import { ExternalLibraryName } from '../application/types/ExternalTypes';
import { ExternalLibraryName } from 'src/commons/application/types/ExternalTypes';
import {
Assessment,
AssessmentOverview,
Expand All @@ -17,7 +15,9 @@ import {
Question,
Testcase,
TestcaseTypes
} from '../assessment/AssessmentTypes';
} from 'src/commons/assessment/AssessmentTypes';
import { Builder } from 'xml2js';

import {
EDITING_ID,
XmlParseStrCProblem,
Expand Down
4 changes: 2 additions & 2 deletions src/commons/XMLParser/XMLParserTypes.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ExternalLibraryName } from '../application/types/ExternalTypes';
import { Question } from '../assessment/AssessmentTypes';
import { ExternalLibraryName } from 'src/commons/application/types/ExternalTypes';
import { Question } from 'src/commons/assessment/AssessmentTypes';

export const EDITING_ID = -1;

Expand Down
2 changes: 1 addition & 1 deletion src/commons/achievement/AchievementCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import { Icon, Intent, ProgressBar } from '@blueprintjs/core';
import { IconNames } from '@blueprintjs/icons';
import React, { useContext } from 'react';
import { AchievementContext, handleGlow } from 'src/features/achievement/AchievementConstants';
import { AchievementStatus } from 'src/features/achievement/AchievementTypes';

import { AchievementStatus } from '../../features/achievement/AchievementTypes';
import AchievementDeadline from './card/AchievementDeadline';
import AchievementXp from './card/AchievementXp';

Expand Down
9 changes: 4 additions & 5 deletions src/commons/achievement/AchievementCommentCard.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import React, { useMemo } from 'react';
import { useNavigate } from 'react-router';

import { Assessment } from '../assessment/AssessmentTypes';
import { useTypedSelector } from '../utils/Hooks';
import { showWarningMessage } from '../utils/notifications/NotificationsHelper';
import { assessmentTypeLink } from '../utils/ParamParseHelper';
import { Assessment } from 'src/commons/assessment/AssessmentTypes';
import { useTypedSelector } from 'src/commons/utils/Hooks';
import { showWarningMessage } from 'src/commons/utils/notifications/NotificationsHelper';
import { assessmentTypeLink } from 'src/commons/utils/ParamParseHelper';

const AchievementCommentCard: React.FC<{
assessment: Assessment;
Expand Down
5 changes: 2 additions & 3 deletions src/commons/achievement/AchievementFilter.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { Icon, IconName } from '@blueprintjs/core';
import React from 'react';

import { getFilterColor } from '../../features/achievement/AchievementConstants';
import { FilterStatus } from '../../features/achievement/AchievementTypes';
import { getFilterColor } from 'src/features/achievement/AchievementConstants';
import { FilterStatus } from 'src/features/achievement/AchievementTypes';

type AchievementFilterProps = {
filterState: [FilterStatus, any];
Expand Down
6 changes: 4 additions & 2 deletions src/commons/achievement/AchievementManualEditor.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
import { Button, Checkbox, MenuItem, NumericInput } from '@blueprintjs/core';
import { ItemPredicate, ItemRenderer, Select } from '@blueprintjs/select';
import React, { useContext, useEffect, useState } from 'react';
import {
showSuccessMessage,
showWarningMessage
} from 'src/commons/utils/notifications/NotificationsHelper';
import { AchievementContext } from 'src/features/achievement/AchievementConstants';
import {
AchievementGoal,
AchievementUser,
GoalProgress
} from 'src/features/achievement/AchievementTypes';

import { showSuccessMessage, showWarningMessage } from '../utils/notifications/NotificationsHelper';

type AchievementManualEditorProps = {
hiddenState: [boolean, any];
userState: [AchievementUser | undefined, any];
Expand Down
4 changes: 2 additions & 2 deletions src/commons/achievement/AchievementOverview.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import React, { useEffect } from 'react';
import { useDispatch } from 'react-redux';
import { FETCH_TOTAL_XP, FETCH_TOTAL_XP_ADMIN } from 'src/commons/application/types/SessionTypes';
import { useTypedSelector } from 'src/commons/utils/Hooks';
import { AchievementUser } from 'src/features/achievement/AchievementTypes';

import { FETCH_TOTAL_XP, FETCH_TOTAL_XP_ADMIN } from '../application/types/SessionTypes';
import { useTypedSelector } from '../utils/Hooks';
import AchievementLevel from './overview/AchievementLevel';

type AchievementOverviewProps = {
Expand Down
7 changes: 2 additions & 5 deletions src/commons/achievement/AchievementTask.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
import { Collapse } from '@blueprintjs/core';
import React, { useContext, useState } from 'react';
import { AchievementContext, getAbilityColor } from 'src/features/achievement/AchievementConstants';
import { AchievementStatus, FilterStatus } from 'src/features/achievement/AchievementTypes';

import {
AchievementContext,
getAbilityColor
} from '../../features/achievement/AchievementConstants';
import { AchievementStatus, FilterStatus } from '../../features/achievement/AchievementTypes';
import AchievementCard from './AchievementCard';

type AchievementTaskProps = {
Expand Down
15 changes: 9 additions & 6 deletions src/commons/achievement/AchievementView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,19 @@ import { Icon } from '@blueprintjs/core';
import { IconNames } from '@blueprintjs/icons';
import React, { useContext, useEffect } from 'react';
import { useDispatch } from 'react-redux';

import {
FETCH_ASSESSMENT,
FETCH_ASSESSMENT_ADMIN
} from 'src/commons/application/types/SessionTypes';
import { Assessment, FETCH_ASSESSMENT_OVERVIEWS } from 'src/commons/assessment/AssessmentTypes';
import { useTypedSelector } from 'src/commons/utils/Hooks';
import {
AchievementContext,
getAbilityBackground,
getAbilityGlow
} from '../../features/achievement/AchievementConstants';
import { AchievementStatus, AchievementUser } from '../../features/achievement/AchievementTypes';
import { FETCH_ASSESSMENT, FETCH_ASSESSMENT_ADMIN } from '../application/types/SessionTypes';
import { Assessment, FETCH_ASSESSMENT_OVERVIEWS } from '../assessment/AssessmentTypes';
import { useTypedSelector } from '../utils/Hooks';
} from 'src/features/achievement/AchievementConstants';
import { AchievementStatus, AchievementUser } from 'src/features/achievement/AchievementTypes';

import AchievementCommentCard from './AchievementCommentCard';
import { prettifyDate } from './utils/DateHelper';
import AchievementViewCompletion from './view/AchievementViewCompletion';
Expand Down
9 changes: 6 additions & 3 deletions src/commons/achievement/card/AchievementDeadline.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import { Icon } from '@blueprintjs/core';
import { IconNames } from '@blueprintjs/icons';
import React from 'react';

import { DeadlineColors } from '../../../features/achievement/AchievementConstants';
import { isExpired, prettifyDeadline, timeFromExpired } from '../utils/DateHelper';
import {
isExpired,
prettifyDeadline,
timeFromExpired
} from 'src/commons/achievement/utils/DateHelper';
import { DeadlineColors } from 'src/features/achievement/AchievementConstants';

type AchievementDeadlineProps = {
deadline?: Date;
Expand Down
3 changes: 1 addition & 2 deletions src/commons/achievement/control/AchievementPreview.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import { Button } from '@blueprintjs/core';
import { IconNames } from '@blueprintjs/icons';
import React, { useContext, useReducer, useState } from 'react';
import AchievementView from 'src/commons/achievement/AchievementView';
import { AchievementContext } from 'src/features/achievement/AchievementConstants';
import { FilterStatus } from 'src/features/achievement/AchievementTypes';
import { generateAchievementTasks } from 'src/pages/achievement/subcomponents/AchievementDashboard';

import AchievementView from '../AchievementView';

type AchievementPreviewProps = {
awaitPublish: boolean;
publishChanges: () => void;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
import {
cardBackgroundUrl,
coverImageUrl
} from '../../../../features/achievement/AchievementConstants';
import {
AchievementItem,
AchievementView
} from '../../../../features/achievement/AchievementTypes';
import { cardBackgroundUrl, coverImageUrl } from 'src/features/achievement/AchievementConstants';
import { AchievementItem, AchievementView } from 'src/features/achievement/AchievementTypes';

export const viewTemplate: AchievementView = {
coverImage: `${coverImageUrl}/default.png`,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,11 @@ import { IconNames } from '@blueprintjs/icons';
import { Tooltip2 } from '@blueprintjs/popover2';
import { cloneDeep } from 'lodash';
import React, { useContext, useMemo, useReducer, useState } from 'react';
import ItemDeleter from 'src/commons/achievement/control/common/ItemDeleter';
import ItemSaver from 'src/commons/achievement/control/common/ItemSaver';
import { AchievementContext } from 'src/features/achievement/AchievementConstants';
import { AchievementItem, AchievementView } from 'src/features/achievement/AchievementTypes';

import { AchievementContext } from '../../../../features/achievement/AchievementConstants';
import {
AchievementItem,
AchievementView
} from '../../../../features/achievement/AchievementTypes';
import ItemDeleter from '../common/ItemDeleter';
import ItemSaver from '../common/ItemSaver';
import AchievementSettings from './AchievementSettings';
import AchievementUuidCopier from './AchievementUuidCopier';
import {
Expand Down
4 changes: 2 additions & 2 deletions src/commons/achievement/control/goalEditor/EditableGoal.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { EditableText } from '@blueprintjs/core';
import { cloneDeep } from 'lodash';
import React, { useContext, useMemo, useReducer, useState } from 'react';
import ItemDeleter from 'src/commons/achievement/control/common/ItemDeleter';
import ItemSaver from 'src/commons/achievement/control/common/ItemSaver';
import { AchievementContext } from 'src/features/achievement/AchievementConstants';
import { GoalDefinition, GoalMeta } from 'src/features/achievement/AchievementTypes';

import ItemDeleter from '../common/ItemDeleter';
import ItemSaver from '../common/ItemSaver';
import {
EditableGoalAction as Action,
EditableGoalActionType as ActionType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@ import { IconNames } from '@blueprintjs/icons';
import { Tooltip2 } from '@blueprintjs/popover2';
import { ItemRenderer, Select } from '@blueprintjs/select';
import React from 'react';
import EditableDate from 'src/commons/achievement/control/goalEditor/EditableDate';
import EditableTime from 'src/commons/achievement/control/goalEditor/EditableTime';
import { EventMeta, EventType, GoalMeta } from 'src/features/achievement/AchievementTypes';

import EditableDate from '../EditableDate';
import EditableTime from '../EditableTime';

type EditableEventMetaProps = {
changeMeta: (meta: GoalMeta) => void;
eventMeta: EventMeta;
Expand Down
4 changes: 2 additions & 2 deletions src/commons/achievement/overview/AchievementLevel.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { ProgressBar } from '@blueprintjs/core';
import React, { useState } from 'react';
import Constants from 'src/commons/utils/Constants';
import { xpPerLevel } from 'src/features/achievement/AchievementConstants';

import { xpPerLevel } from '../../../features/achievement/AchievementConstants';
import Constants from '../../utils/Constants';
import AchievementMilestone from './AchievementMilestone';

type AchievementLevelProps = {
Expand Down
3 changes: 1 addition & 2 deletions src/commons/achievement/overview/AchievementMilestone.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import React from 'react';

import Constants from '../../utils/Constants';
import Constants from 'src/commons/utils/Constants';

type AchievementMilestoneProps = {
studentXp: number;
Expand Down
2 changes: 1 addition & 1 deletion src/commons/achievement/utils/AchievementBackender.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
GoalDefinition,
GoalMeta,
GoalType
} from '../../../features/achievement/AchievementTypes';
} from 'src/features/achievement/AchievementTypes';

export const backendifyGoalDefinition = (goal: GoalDefinition) => ({
targetCount: goal.meta.type === GoalType.ASSESSMENT ? 1 : goal.meta.targetCount,
Expand Down
8 changes: 4 additions & 4 deletions src/commons/achievement/utils/AchievementInferencer.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { cloneDeep, uniq } from 'lodash';
import { v4 } from 'uuid';

import { showDangerMessage } from 'src/commons/utils/notifications/NotificationsHelper';
import {
AchievementGoal,
AchievementItem,
Expand All @@ -9,8 +8,9 @@ import {
GoalDefinition,
GoalProgress,
GoalType
} from '../../../features/achievement/AchievementTypes';
import { showDangerMessage } from '../../utils/notifications/NotificationsHelper';
} from 'src/features/achievement/AchievementTypes';
import { v4 } from 'uuid';

import { isExpired, isReleased } from './DateHelper';

/**
Expand Down
5 changes: 3 additions & 2 deletions src/commons/achievement/utils/EventHandler.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { showSuccessMessage } from 'src/commons/utils/notifications/NotificationsHelper';
import {
AchievementGoal,
AchievementItem,
EventMeta,
EventType,
GoalProgress,
GoalType
} from '../../../features/achievement/AchievementTypes';
import { showSuccessMessage } from '../../utils/notifications/NotificationsHelper';
} from 'src/features/achievement/AchievementTypes';

import AchievementInferencer from './AchievementInferencer';
import { isExpired, isReleased, isWithinTimeRange } from './DateHelper';

Expand Down
12 changes: 6 additions & 6 deletions src/commons/achievement/utils/InsertFakeAchievements.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import moment from 'moment';

import {
cardBackgroundUrl,
coverImageUrl
} from '../../../features/achievement/AchievementConstants';
import { GoalType } from '../../../features/achievement/AchievementTypes';
import { AssessmentConfiguration, AssessmentOverview } from '../../assessment/AssessmentTypes';
AssessmentConfiguration,
AssessmentOverview
} from 'src/commons/assessment/AssessmentTypes';
import { cardBackgroundUrl, coverImageUrl } from 'src/features/achievement/AchievementConstants';
import { GoalType } from 'src/features/achievement/AchievementTypes';

import AchievementInferencer from './AchievementInferencer';
import { isExpired, isReleased } from './DateHelper';

Expand Down
3 changes: 1 addition & 2 deletions src/commons/achievement/view/AchievementViewGoal.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { ProgressBar } from '@blueprintjs/core';
import React from 'react';

import { AchievementGoal } from '../../../features/achievement/AchievementTypes';
import { AchievementGoal } from 'src/features/achievement/AchievementTypes';

type AchievementViewGoalProps = {
goals: AchievementGoal[];
Expand Down
11 changes: 7 additions & 4 deletions src/commons/application/Application.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import * as React from 'react';
import { useDispatch } from 'react-redux';
import { Outlet } from 'react-router-dom';
import NavigationBar from 'src/commons/navigationBar/NavigationBar';
import Constants from 'src/commons/utils/Constants';
import { useLocalStorageState, useSession } from 'src/commons/utils/Hooks';
import {
defaultWorkspaceSettings,
WorkspaceSettingsContext
} from 'src/commons/WorkspaceSettingsContext';

import NavigationBar from '../navigationBar/NavigationBar';
import Constants from '../utils/Constants';
import { useLocalStorageState, useSession } from '../utils/Hooks';
import { defaultWorkspaceSettings, WorkspaceSettingsContext } from '../WorkspaceSettingsContext';
import { fetchUserAndCourse } from './actions/SessionActions';

const Application: React.FC = () => {
Expand Down
Loading