<ButtonPrimary
autoFocus
type="submit"
- disabled={this.state.submitting || this.state.selectedProfiles.length === 0}
+ disabled={
+ this.state.submitting ||
+ (this.state.selectedProfiles.length === 0 && profile === undefined)
+ }
form={FORM_ID}
>
{translate('apply')}
selectedProfile?: Profile;
}
+const MAX_INITIAL_LANGUAGES = 5;
+
export default function FacetsList(props: FacetsListProps) {
const languageDisabled = !props.hideProfileFacet && props.query.profile !== undefined;
return (
<>
<LanguageFacet
+ maxInitialItems={MAX_INITIAL_LANGUAGES}
onChange={props.onFilterChange}
onToggle={props.onFacetToggle}
open={!!props.openFacets.languages}
selectedLanguages={props.query.languages}
- stats={props.facets && props.facets.languages}
+ stats={props.facets?.languages}
disabled={languageDisabled}
disabledHelper={translate('coding_rules.filters.language.inactive')}
/>
return (
<header className="sw-flex sw-mb-6">
<div className="sw-mr-8 sw-flex-1">
- <div className="sw-mb-4">
+ <div className="sw-mb-2">
{ruleDetails.cleanCodeAttributeCategory !== undefined && (
<CleanCodeAttributePill
cleanCodeAttributeCategory={ruleDetails.cleanCodeAttributeCategory}
)}
</div>
- <div className="sw-mb-4">
- <PageContentFontWrapper className="sw-body-md-highlight" as="h1">
+ <div className="sw-mb-2">
+ <PageContentFontWrapper className="sw-heading-md" as="h1">
<IssueMessageHighlighting message={ruleDetails.name} />
<ClipboardIconButton
Icon={LinkIcon}
{!!ruleDetails.impacts.length && (
<div className="sw-flex sw-items-center sw-flex-1">
<Note>{translate('issue.software_qualities.label')}</Note>
- <ul className="sw-flex sw-gap-2">
+ <ul className="sw-flex sw-gap-2 sw-ml-1">
{ruleDetails.impacts.map(({ severity, softwareQuality }) => (
<li key={softwareQuality}>
<SoftwareImpactPill
- className="sw-ml-2"
severity={severity}
quality={softwareQuality}
type="rule"
</div>
)}
</div>
- <BasicSeparator className="sw-my-3" />
+ <BasicSeparator className="sw-my-4" />
{hasTypeData && (
<div className="sw-flex sw-items-center">
{!ruleDetails.isExternal && (
import {
Badge,
DangerButtonSecondary,
+ DisabledText,
InheritanceIcon,
Link,
- Note,
OverridenIcon,
themeBorder,
} from 'design-system';
import * as React from 'react';
import { Profile, deactivateRule } from '../../../api/quality-profiles';
+import DocumentationTooltip from '../../../components/common/DocumentationTooltip';
import ConfirmButton from '../../../components/controls/ConfirmButton';
import Tooltip from '../../../components/controls/Tooltip';
import { CleanCodeAttributePill } from '../../../components/shared/CleanCodeAttributePill';
import SoftwareImpactPill from '../../../components/shared/SoftwareImpactPill';
+import TypeHelper from '../../../components/shared/TypeHelper';
import TagsList from '../../../components/tags/TagsList';
import { translate, translateWithParameters } from '../../../helpers/l10n';
import { getRuleUrl } from '../../../helpers/urls';
return (
<div className="sw-mr-2 sw-shrink-0">
- {selectedProfile && selectedProfile.parentName && (
+ {selectedProfile?.parentName && (
<>
{activation.inherit === 'OVERRIDES' && (
<Tooltip
render() {
const { rule, selected } = this.props;
- const allTags = [...(rule.tags || []), ...(rule.sysTags || [])];
+ const allTags = [...(rule.tags ?? []), ...(rule.sysTags ?? [])];
return (
<ListItemStyled
selected={selected}
onClick={() => this.props.selectRule(rule.key)}
>
<div className="sw-flex sw-flex-col">
- <div className="sw-mb-4">
+ <div className="sw-mb-2">
{rule.cleanCodeAttributeCategory !== undefined && (
<CleanCodeAttributePill
cleanCodeAttributeCategory={rule.cleanCodeAttributeCategory}
)}
</div>
<div className="sw-flex sw-items-center sw-ml-2">
- <Note>{rule.langName}</Note>
+ <span>{rule.langName}</span>
{rule.impacts.map(({ severity, softwareQuality }) => (
<SoftwareImpactPill
className="sw-ml-3"
type="rule"
/>
))}
+
+ <DocumentationTooltip
+ content={
+ <div>
+ <p className="sw-mb-2">{translate('coding_rules.type.deprecation.title')}</p>
+ <p>{translate('coding_rules.type.deprecation.filter_by')}</p>
+ </div>
+ }
+ links={[
+ {
+ href: '/user-guide/clean-code',
+ label: translate('learn_more'),
+ },
+ ]}
+ >
+ <DisabledText className="sw-ml-3 sw-whitespace-nowrap">
+ <TypeHelper
+ className="sw-flex sw-items-center"
+ iconFill="iconTypeDisabled"
+ type={rule.type}
+ />
+ </DisabledText>
+ </DocumentationTooltip>
{allTags.length > 0 && (
<TagsList allowUpdate={false} className="sw-ml-3" tags={allTags} />
)}
interface Props {
fetching?: boolean;
languages: Languages;
+ maxInitialItems?: number;
selectedLanguages: string[];
loadSearchResultCount?: (property: string, changes: Partial<Query>) => Promise<Facet>;
onChange: (changes: Partial<Query>) => void;
getSearchResultKey={(language) => language.key}
getSearchResultText={(language) => language.name}
loadSearchResultCount={this.loadSearchResultCount}
+ maxInitialItems={this.props.maxInitialItems}
minSearchLength={1}
onChange={this.props.onChange}
onSearch={this.handleSearch}
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+import { IconProps } from 'design-system';
import * as React from 'react';
import { translate } from '../../helpers/l10n';
import { IssueType, RuleType } from '../../types/types';
interface Props {
className?: string;
+ iconFill?: IconProps['fill'];
type: IssueType | RuleType;
}
export default function TypeHelper(props: Props) {
return (
<span className={props.className}>
- <IssueTypeIcon className="sw-mr-1" type={props.type} />
+ <IssueTypeIcon className="sw-mr-1" type={props.type} fill={props.iconFill} />
{translate('issue.type', props.type)}
</span>
);
coding_rules.skip_to_filters=Skip to rules filters
coding_rules.to_select_rules=Select rules
coding_rules.to_navigate=Navigate to rule
-coding_rules.type.tooltip.CODE_SMELL=Code Smell Detection Rule
-coding_rules.type.tooltip.BUG=Bug Detection Rule
-coding_rules.type.tooltip.VULNERABILITY=Vulnerability Detection Rule
-coding_rules.type.tooltip.SECURITY_HOTSPOT=Security Hotspot Detection Rule
coding_rules.type.deprecation.title=Types of detection rules are deprecated.
coding_rules.type.deprecation.filter_by=You can now filter rules by Clean Code Attribute and Software Quality.
coding_rules.severity.deprecation.title=Severities are now directly tied to the software quality impacted. This old severity is deprecated and can no longer be modified.