📄 todo.txt
字号:
Goal:
Basically 're-invent' FxCop (a very, very good no cost tool from Microsoft)
Todo:
Translate all FxCop rules to Assembly Analyser and write a unit test that tests
the rule in action (except maybe 'Assembly' and 'Module' rules.
Status (FxCop rules):
DesignRules:
* AbstractTypesShouldNotHaveConstructors IS AbstractTypesPublicConstructors
AddAndSubtractOverrideShouldHaveOperatorEqualsOverride
* AssembliesAreMarkedClsCompliant IS AssemblyClsCompliantRule
* AssembliesHaveStrongNames IS AssemblyStrongName
* AssembliesHaveVersionNumbers IS AssemblyVersionNumber
AssembliesShouldBeComVisibleAttributed
AttributesAreAttributeUsageAttributed
AttributesShouldHaveAccessorsForAllArguments
AvoidDefaultConstructorForStructures
AvoidMarkingMembersObsolete
AvoidMarkingTypesObsolete
* AvoidNamespacesWithFewMembers IS AvoidNamespacesWithFewMembers
AvoidOutParameters
AvoidValueTypesPassedAsByRefParameters
ConsiderHavingOnlyOneDimensionForIndexer
ConsiderReplacingMethodsWithProperties
ConsiderReplacingRepetitiveArgsWithParameterArray
DefaultParametersAreNotUsed
EnumerationsShouldBeFlagsAttributed
EnumerationsShouldBeInt32
EnumerationsShouldBeIntegralType
* EventFirstParametersAreTypeObject IS EventFirstParameterIsObject
* EventHandlersReturnVoid IS EventHandlersReturnVoid
* EventSecondParametersAreEventArgsType IS EventSecondParameterIsEventArgs
* EventsHaveTwoParameters IS EventsHaveTwoParameters
EventsShouldBeUsed
ExceptionAndSystemExceptionTypesAreNotCaught
ExceptionsRequireMultipleConstructors
ExplicitMethodImplementationsInUnsealedClassesHaveVisibleAlternates
ExternallyVisibleNestedTypesShouldNotBeUsed
ICollectionImplementationsHaveStronglyTypedMembers
IComparableImplementationsOverrideEquals
IComparableImplementationsOverrideOperators
IEnumeratorImplementationsHaveStronglyTypedMembers
IListImplementationsHaveStronglyTypedMembers
* InterfacesShouldNotBeEmpty IS InterfaceNotEmpty
ISerializableTypesAreMarkedSerializable
ObsoleteAttributeOnMemberShouldProvideMessage
ObsoleteAttributeOnTypeShouldProvideMessage
OnlyIntegralValuesOrStringsShouldBeUsedForIndexers
PointersAndMultiDimensionalArraysAreNotPassedAsParameters
* PropertiesShouldNotBeWriteOnly IS PropertiesShouldNotHaveSetOnly
ReferenceTypesAreNotPassedAsByRefParameters
ReferenceTypesShouldNotOverrideOperatorEquals
SealedTypesDoNotDeclareProtectedMembers
SealedTypesDoNotDeclareVirtualMembers
TypesAllocatingUnmanagedResourcesImplementIDisposable
* TypesBelongToNamespaces IS TypesShouldBeInNamespaces
* TypesDoNotHavePublicInstanceFields IS TypesHaveNoPublicInstanceFields
TypesHavingOnlyStaticMembersShouldBeSealed
TypesHavingOnlyStaticMembersShouldNotHaveConstructors
NamingRules:
* AttributeNamesHaveAttributeSuffix IS AttributeSuffixIsAttribute
* CollectionNamesHaveCollectionSuffix IS CheckCollectionSuffix
* ConditionNamesHaveConditionSuffix IS MembershipConditionNamesSuffixIsMembershipCondition (I think 'MembershipCondition' is more correct than just 'Condition', right?)
* DelegateNamesDoNotHaveDelegateSuffix IS DelegatesHaveNoDelegateSuffix
* DictionaryNamesHaveDictionarySuffix IS DictionaryTypeSuffixIsDictionary
* EnumerationNamesDoNotHaveEnumSuffix IS EnumsHaveNoEnumSuffix
* EventArgsNamesHaveEventArgsSuffix IS EventArgsSuffixIsEventArgs
* EventFirstParametersHaveNameSender IS EventFirstParameterNameIsSender
* EventHandlerNamesHaveEventHandlerSuffix IS EventHandlerSuffixIsEventHandler
* EventsDoNotHaveBeforeOrAfterPrefix IS EventsDoNotHaveBeforeOrAfterPrefix
* EventSecondParametersHaveNameE IS EventSecondParameterNameIsE
* ExceptionNamesHaveExceptionSuffix IS ExceptionSuffixIsException
* FlagEnumerationsShouldHavePluralNames IS FlagEnumerationsArePlural
* InterfaceNamesHaveIPrefix IS InterfacesPrefixIsI
* MemberNamesArePascalCased IS MembersArePascalCased
MemberNamesDifferByMoreThanCase
* MemberNamesDoNotHaveUnderscores IS MembersDoNotContainUnderscores
MemberNamesHaveOnlyShortAcronymsAllCaps
MemberNamesHaveShortAcronymsAllCaps
* NamespaceNamesArePascalCased IS NamespacesArePascalCased
NamespaceNamesDifferByMoreThanCase
* NamespaceNamesDoNotHaveUnderscores IS NamespacesDoNotContainUnderscores
NamespaceNamesDoNotMatchKeywords
NamespaceNamesHaveOnlyShortAcronymsAllCaps
NamespaceNamesHaveShortAcronymsAllCaps
* OnlyAttributeNamesHaveAttributeSuffix IS OnlyAttributesSuffixAttribute
* OnlyCollectionNamesHaveCollectionSuffix IS OnlyCollectionsSuffixCollection
-> OnlyDictionaryNamesHaveDictionarySuffix HANDLED IN OnlyCollectionsSuffixCollection
* OnlyEventArgsNamesHaveEventArgsSuffix IS OnlyEventArgsSuffixEventArgs
( OnlyEventHandlerNamesHaveEventHandlerSuffix is OnlyEventHandlerSuffixIsEventHandler
* OnlyExceptionNamesHaveExceptionSuffix IS OnlyExceptionsSuffixException
OnlyFlagEnumerationsShouldHavePluralNames
* OnlyPermissionNamesHavePermissionSuffix IS OnlyPermissionsSuffixPermission
-> OnlyQueueNamesHaveQueueSuffix HANDLED IN OnlyCollectionsSuffixCollection
-> OnlyStackNamesHaveStackSuffix HANDLED IN OnlyCollectionsSuffixCollection
* OnlyStreamNamesHaveStreamSuffix IS OnlyStreamsSuffixStream
* ParameterNamesAreCamelCased IS ParametersAreCamelCased
ParameterNamesDifferByMoreThanCase
ParameterNamesDoNotContainLanguageSpecificTypeNames
* ParameterNamesDoNotHaveUnderscores IS ParameterNamesDoNotHaveUnderscores
ParameterNamesDoNotMatchKeywords
ParameterNamesDoNotMatchMemberNames
ParameterNamesHaveOnlyShortAcronymsAllCaps
ParameterNamesHaveShortAcronymsAllCaps
ParameterNamesShouldHaveCompleteWords
ParameterNamesShouldNotContainTypeNames
* PermissionNamesHavePermissionSuffix IS PermissionSuffixIsPermission
PropertyNamesShouldNotMatchGetMethodNames
* StreamNamesHaveStreamSuffix IS StreamSuffixIsStream
* TypeNamesArePascalCased IS TypesArePascalCased
TypeNamesDifferByMoreThanCase
TypeNamesDoNotHaveCPrefix
* TypeNamesDoNotHaveUnderscores IS TypeNamesDoNotContainUnderscores
TypeNamesDoNotMatchKeywords
TypeNamesDoNotMatchNamespaceNames
TypeNamesHaveOnlyShortAcronymsAllCaps
TypeNamesHaveShortAcronymsAllCaps
* TypesImplementingInterfacesDoNotHaveImplSuffix IS TypesImplementingInterfacesHaveNoSuffixImpl
Performance Rules:
AvoidBuildingNonCallableCode
AvoidBuildingUninstantiatedInternalClasses
AvoidUnsealedAttributes
ConsiderJaggedArrayInsteadOfMultiDimensionalArrayInFields
ConsiderJaggedArrayInsteadOfMultiDimensionalArrayInMethods
ConsiderJaggedArrayInsteadOfMultiDimensionalArrayInProperties
ConsiderOverridingEqualsAndOperatorEqualsOnValueTypes
DisposeMethodsCallSuppressFinalize
PropertiesShouldNotReturnArrays
TestForEmptyStringsUsingStringLength
Security Rules:
ArrayFieldsShouldNotBeReadOnly
AssertRequiresDemand
ConsiderPermitOnlyOrDenySecurityReview
DemandsOnValueTypeConstructorsDoNotPreventInstantiation
DemandsOnValueTypesDoNotPreventInstantiation
EventHandlersRequireSecurity
GetObjectDataIsSerializationFormatterSecurityPermissionAttributed
IntPtrFieldsHavePrivateAccessLevel
LinkDemandsOnTypesDoNotPreventAccessToTypeFields
MembersDoNotSuppressUnmanagedCodeSecurity
MembersThatCallLateBoundMembersRequireDeclarativeSecurity
MethodLevelSecurityOverridesTypeLevelSecurity
MethodsInTypesWithIntPtrFieldAndFinalizeMethodRequireGCKeepAlive
PartiallyTrustedMethodsCallPartiallyTrustedMethodsOnly
PartiallyTrustedTypesExtendPartiallyTrustedTypesOnly
PInvokeMethodCallWithSuppressUnmanagedCodeSecurityAttributeRequiresSecurityCheck
PublicTypesImplementingNonPublicInterfacesShouldBeSealed
SerializationMagicConstructorsRequireSecurityCheck
StaticConstructorsHavePrivateAccessLevel
TypesAreNotPublicPInvokeMethodsAndSuppressUnmanagedCodeSecurityAttributed
TypesDoNotSuppressUnmanagedCodeSecurity
UnsealedPublicTypesDoNotHaveInternalVirtualMembers
UnsecuredMembersDoNotCallMembersProtectedByLinkDemands
VirtualMethodsAndOverridesRequireSameLinkDemands
Usage Rules:
AssembliesHavePermissionRequests
AssembliesHaveValidStrongNames
AvoidNonConstantStaticFields
AvoidWebMethodAttributedServicedComponentMembers
ConsiderCallingDataMembersDisposeMethod
ConstructorsShouldNotCallBaseClassVirtualMethods
CreateDomainIsNotCalledWithNullParameters
DisposeMethodsCallBaseClassDispose
DisposeMethodsRequireFinalizeMethod
EnumerationsShouldNotBeFlagsAttributed
EqualsOverridesRequireGetHashCodeOverride
ExceptionsAreMarkedSerializable
ExceptionsShouldNotBeThrownFromFilterBlocks
FinalizeMethodsCallBaseClassFinalize
FinalizeMethodsHaveProtectedAccessLevel
InheritedPublicMembersDoNotChangeToPrivate
MemberNamesShouldBeSpelledCorrectly
MembersDifferByMoreThanReturnType
NamespaceNamesShouldBeSpelledCorrectly
OperatorEqualsOverridesRequireEqualsOverride
OperatorOverloadsHaveNamedAlternativeMethods
OperatorsHaveSymmetricalOverloads
ParameterNamesShouldBeSpelledCorrectly
PInvokeOnlyValidEntryPoints
PropertiesReturningCollectionsShouldBeReadOnly
ResourceFilesAreBuiltUsingReleaseVersions
ResourceStringsShouldBeSpelledCorrectly
SerializableTypesShouldHaveMagicConstructor
TypeNamesShouldBeSpelledCorrectly
UseParamsForVariableArguments
ValueTypesEqualsOverridesRequireOperatorEqualsOverride
ValueTypesWithRvaFieldsDoNotHaveNonPublicFields
WindowsFormsApplicationsAreMarkedStaThread
Globalization Rules:
CultureInfoShouldBePassed
IFormatProviderShouldBePassed
LocaleShouldBeSetForDataTypes
COM Rules:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -