]> source.dussan.org Git - sonarqube.git/commitdiff
NO-JIRA Fix code smells in new code
authorAmbroise C <ambroise.christea@sonarsource.com>
Thu, 14 Sep 2023 08:25:36 +0000 (10:25 +0200)
committersonartech <sonartech@sonarsource.com>
Thu, 14 Sep 2023 20:02:39 +0000 (20:02 +0000)
server/sonar-web/design-system/src/components/Dropdown.tsx
server/sonar-web/src/main/js/app/components/nav/component/ComponentNav.tsx
server/sonar-web/src/main/js/apps/issues/crossComponentSourceViewer/ComponentSourceSnippetGroupViewer.tsx
server/sonar-web/src/main/js/apps/projectNewCode/components/ProjectNewCodeDefinitionSelector.tsx
server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRules.tsx
server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRulesRow.tsx
server/sonar-web/src/main/js/apps/settings/components/almIntegration/AlmBindingDefinitionFormRenderer.tsx
server/sonar-web/src/main/js/apps/settings/components/almIntegration/BitbucketForm.tsx
server/sonar-web/src/main/js/components/controls/Select.tsx
server/sonar-web/src/main/js/components/new-code-definition/NCDAutoUpdateMessage.tsx
server/sonar-web/src/main/js/components/ui/AdminPageHeader.tsx

index 1e2f47de5975d4ea4d472252e6af81e44ddcaa20..81012702d5570a6dd2a42b00778713b6d26353aa 100644 (file)
@@ -42,7 +42,7 @@ interface RenderProps {
 interface Props {
   allowResizing?: boolean;
   children:
-    | ((renderProps: RenderProps) => JSX.Element)
+    | ((renderProps: Readonly<RenderProps>) => JSX.Element)
     | React.ReactElement<{ onClick: OnClickCallback }>;
   className?: string;
   closeOnClick?: boolean;
@@ -61,10 +61,10 @@ interface State {
   open: boolean;
 }
 
-export class Dropdown extends React.PureComponent<Props, State> {
+export class Dropdown extends React.PureComponent<Readonly<Props>, State> {
   state: State = { open: false };
 
-  componentDidUpdate(props: Props, prevState: State) {
+  componentDidUpdate(props: Readonly<Props>, prevState: State) {
     if (!prevState.open && this.state.open && this.props.onOpen) {
       this.props.onOpen();
     }
@@ -146,7 +146,7 @@ interface ActionsDropdownProps extends Omit<Props, 'children' | 'overlay'> {
   toggleClassName?: string;
 }
 
-export function ActionsDropdown(props: ActionsDropdownProps) {
+export function ActionsDropdown(props: Readonly<ActionsDropdownProps>) {
   const { children, buttonSize, ariaLabel, toggleClassName, ...dropdownProps } = props;
 
   const intl = useIntl();
index 48cc565af1dbc4baa9cc974b0fa018e49fb907e6..b1ab42b3fda11ed05c5539a1ad6c337dcabc9fbb 100644 (file)
@@ -46,7 +46,7 @@ export interface ComponentNavProps extends WithAvailableFeaturesProps {
   projectBindingErrors?: ProjectAlmBindingConfigurationErrors;
 }
 
-function ComponentNav(props: ComponentNavProps) {
+function ComponentNav(props: Readonly<ComponentNavProps>) {
   const {
     branchLike,
     component,
index 454babaa25b72791f228bfe4ac437c193b9ca6b4..43a721612fd091367be5d27c7c1bc5f917a7c0f9 100644 (file)
@@ -81,10 +81,13 @@ interface State {
   snippets: Snippet[];
 }
 
-export default class ComponentSourceSnippetGroupViewer extends React.PureComponent<Props, State> {
+export default class ComponentSourceSnippetGroupViewer extends React.PureComponent<
+  Readonly<Props>,
+  State
+> {
   mounted = false;
 
-  constructor(props: Props) {
+  constructor(props: Readonly<Props>) {
     super(props);
     this.state = {
       additionalLines: {},
@@ -383,7 +386,7 @@ function isExpandable(snippets: Snippet[], snippetGroup: SnippetGroup) {
     snippets.length === 1 &&
     snippetGroup.component.measures &&
     snippets[0].end - snippets[0].start ===
-      parseInt(snippetGroup.component.measures.lines || '', 10);
+      parseInt(snippetGroup.component.measures.lines ?? '', 10);
 
   return !fullyShown && isFile(snippetGroup.component.q);
 }
index c1f729164412d25eed1db53b3cb91133ccbd3b08..a9cbced11c4cce812f3e2eb7bea76dae2702663d 100644 (file)
@@ -66,7 +66,9 @@ function branchToOption(b: Branch) {
   return { label: b.name, value: b.name, isMain: b.isMain };
 }
 
-export default function ProjectNewCodeDefinitionSelector(props: ProjectBaselineSelectorProps) {
+export default function ProjectNewCodeDefinitionSelector(
+  props: Readonly<ProjectBaselineSelectorProps>,
+) {
   const {
     analysis,
     branch,
index e6a9d7f104cf7f4f274ede7e9d28d50dfd930d9a..f4398a1423a6dc34fae06dc92d8587c3535b4342 100644 (file)
@@ -59,7 +59,7 @@ interface State {
   total: number | null;
 }
 
-export default class ProfileRules extends React.PureComponent<Props, State> {
+export default class ProfileRules extends React.PureComponent<Readonly<Props>, State> {
   mounted = false;
 
   state: State = {
@@ -127,7 +127,7 @@ export default class ProfileRules extends React.PureComponent<Props, State> {
             activatedTotal: activatedRules.paging.total,
             allByType: keyBy<ByType>(this.takeFacet(allRules, 'types'), 'val'),
             activatedByType: keyBy<ByType>(this.takeFacet(activatedRules, 'types'), 'val'),
-            compareToSonarWay: showProfile && showProfile.compareToSonarWay,
+            compareToSonarWay: showProfile?.compareToSonarWay,
             total: allRules.paging.total,
           });
         }
@@ -135,18 +135,6 @@ export default class ProfileRules extends React.PureComponent<Props, State> {
     );
   }
 
-  getRulesCountForType(type: string) {
-    return this.state.activatedByType && this.state.activatedByType[type]
-      ? this.state.activatedByType[type].count
-      : null;
-  }
-
-  getRulesTotalForType(type: string) {
-    return this.state.allByType && this.state.allByType[type]
-      ? this.state.allByType[type].count
-      : null;
-  }
-
   takeFacet(response: SearchRulesResponse, property: string) {
     const facet = response.facets?.find((f) => f.property === property);
     return facet ? facet.values : [];
index 311dda5c90ff36bfde4d8c193c2b9be62145e71e..e91e38e0ca30fade60bf3e3613de1128f77a8090 100644 (file)
@@ -33,7 +33,7 @@ interface Props {
   type?: string;
 }
 
-export default function ProfileRulesRowOfType(props: Props) {
+export default function ProfileRulesRowOfType(props: Readonly<Props>) {
   const activeRulesUrl = getRulesUrl({
     qprofile: props.qprofile,
     activation: 'true',
index 6c398dd4d262df810d1a067f21af0f2736b50061..f6df013c699781c20040e915a5daacfd9f4dc5a3 100644 (file)
@@ -53,7 +53,7 @@ export interface Props {
   validationError?: string;
 }
 
-export default class AlmBindingDefinitionFormRenderer extends React.PureComponent<Props> {
+export default class AlmBindingDefinitionFormRenderer extends React.PureComponent<Readonly<Props>> {
   renderForm = () => {
     const { alm, formData, isUpdate, bitbucketVariant } = this.props;
 
index cf435061d308e24a5cd3f15733d775e2a9eba394..e19213d20796645eed59057b9cc79b9e22f0dfa6 100644 (file)
@@ -39,7 +39,7 @@ export interface BitbucketFormProps {
   onVariantChange: (variant: AlmKeys.BitbucketServer | AlmKeys.BitbucketCloud) => void;
 }
 
-export default function BitbucketForm(props: BitbucketFormProps) {
+export default function BitbucketForm(props: Readonly<BitbucketFormProps>) {
   const { isUpdate, formData, variant } = props;
 
   return (
index aa2dc061402554e58fc1ae5d45f4106cc9e2653f..90485dcaccaad9f25e08ccc8d2bdccb4e98adb51 100644 (file)
@@ -97,7 +97,7 @@ export default function Select<
   Option = LabelValueSelectOption,
   IsMulti extends boolean = boolean,
   Group extends GroupBase<Option> = GroupBase<Option>,
->(props: NamedProps<Option, IsMulti, Group> & StyleExtensionProps) {
+>(props: NamedProps<Option, IsMulti, Group> & Readonly<StyleExtensionProps>) {
   return (
     <ReactSelect<Option, IsMulti, Group>
       {...omit(props, 'className', 'large')}
@@ -141,7 +141,7 @@ export function SearchSelect<
 >(
   props: NamedProps<Option, IsMulti, Group> &
     AsyncProps<Option, IsMulti, Group> &
-    StyleExtensionProps,
+    Readonly<StyleExtensionProps>,
 ) {
   return (
     <AsyncReactSelect<Option, IsMulti, Group>
@@ -167,7 +167,7 @@ export function selectStyle<
 >(
   props?: NamedProps<Option, IsMulti, Group> &
     AsyncProps<Option, IsMulti, Group> &
-    StyleExtensionProps,
+    Readonly<StyleExtensionProps>,
 ): StylesConfig<Option, IsMulti, Group> {
   return {
     container: () => ({
index b6e23f8d22dec639fc407879ae4b85bbcfa34b48..37043bc56824ca57daef1e9ff01d0c0f2f46a980 100644 (file)
@@ -39,7 +39,7 @@ interface NCDAutoUpdateMessageProps extends Pick<CurrentUserContextInterface, 'c
   component?: Component;
 }
 
-function NCDAutoUpdateMessage(props: NCDAutoUpdateMessageProps) {
+function NCDAutoUpdateMessage(props: Readonly<NCDAutoUpdateMessageProps>) {
   const { branchName, component, currentUser } = props;
   const isGlobalBanner = component === undefined;
   const intl = useIntl();
index 566738cc58aefe65904d4f7b34ff4cc2540ea743..94a6f3554f1c27893e758dafbb90324bcf7fd4a1 100644 (file)
@@ -30,7 +30,7 @@ interface Props {
   title: ReactNode;
 }
 
-export function AdminPageHeader({ children, className, description, title }: Props) {
+export function AdminPageHeader({ children, className, description, title }: Readonly<Props>) {
   return (
     <div className={classNames('sw-flex sw-justify-between', className)}>
       <header className="sw-flex-1">