Repository Analysis

mattermost-community/focalboard

Focalboard is an open source, self-hosted alternative to Trello, Notion, and Asana.

0.9 Likely human-written View on GitHub
0.9
Adjusted Score
0.9
Raw Score
100%
Time Factor
2026-05-18
Last Push
26,203
Stars
TypeScript
Language
202,366
Lines of Code
1254
Files
164
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 2MEDIUM 0LOW 162

Pattern Findings

164 matches across 5 categories. Click a row to expand file-level details.

Over-Commented Block139 hits · 139 pts
SeverityFileLineSnippet
LOWwin-wpf/Focalboard/Properties/AssemblyInfo.cs21// COM, set the ComVisible attribute to true on that type.
LOWwin-wpf/Focalboard/Properties/AssemblyInfo.cs41)]
LOWwin-wpf/Focalboard/Properties/Resources.Designer.cs1//------------------------------------------------------------------------------
LOWwebapp/cypress/plugins/index.js1// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
LOWwebapp/src/components/sidebar/sidebar.test.tsx421 </Router>
LOWwebapp/src/components/sidebar/sidebar.test.tsx441 // {id: '3', title: 'Template 3', fields: {icon: '🚴🏻‍♂️'}},
LOWwebapp/src/components/sidebar/sidebar.test.tsx461 // const history = createMemoryHistory()
LOWwebapp/src/components/sidebar/sidebarBoardItem.tsx121 // the same category. Even though the server does this as well on its side,
LOWwebapp/src/components/sidebar/sidebar.tsx121 }, [windowDimensions])
LOW…/components/live-markdown-plugin/liveMarkdownPlugin.ts201// Maps inline styles to the provided ContentBlock's CharacterMetadata list based
LOW…pp/src/components/viewHeader/viewHeaderActionsMenu.tsx21 board: Board
LOW…pp/src/components/viewHeader/viewHeaderActionsMenu.tsx41// const groupByProperty = board.cardProperties.find((o) => o.id === activeView.fields.groupById)
LOW…pp/src/components/viewHeader/viewHeaderActionsMenu.tsx61// const newCard = new Card(card)
LOW…boardPage/backwardCompatibilityQueryParamsRedirect.tsx1// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
LOW…boardPage/backwardCompatibilityQueryParamsRedirect.tsx21 // if (queryCardId) {
LOW…boardPage/backwardCompatibilityQueryParamsRedirect.tsx41 // const lastViewId = lastBoardId ? UserSettings.lastViewId[lastBoardId] : undefined
LOW…boardPage/backwardCompatibilityQueryParamsRedirect.tsx61 // }
LOWserver/auth/auth_test.go101 // ID: "testRootID",
LOWserver/auth/auth_test.go121 // th.Store.EXPECT().GetRootID(gomock.Eq(mockContainer), "badBlock").Return("", errors.New("invalid block"))
LOWserver/auth/auth_test.go141 // }
LOWserver/model/compliance.go1// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
LOWserver/model/auth.go41 // If specified, login using email
LOWserver/api/members.go21 r.HandleFunc("/boards/{boardID}/leave", a.sessionRequired(a.handleLeaveBoard)).Methods("POST")
LOWserver/api/members.go81 // response
LOWserver/api/members.go101 // - name: Body
LOWserver/api/members.go201 // produces:
LOWserver/api/members.go301 // response
LOWserver/api/members.go321 // security:
LOWserver/api/members.go381 // produces:
LOWserver/api/members.go481 // swagger:operation DELETE /boards/{boardID}/members/{userID} deleteMember
LOWserver/api/compliance.go21func (a *API) registerComplianceRoutes(r *mux.Router) {
LOWserver/api/compliance.go41 // description: Team ID. If empty then boards across all teams are included.
LOWserver/api/compliance.go141 }
LOWserver/api/compliance.go161 // type: integer
LOWserver/api/compliance.go181 // type: integer
LOWserver/api/compliance.go281 if err != nil {
LOWserver/api/compliance.go301 // in: query
LOWserver/api/compliance.go321 // in: query
LOWserver/api/users.go21 r.HandleFunc("/users/me/config", a.sessionRequired(a.handleGetUserPreferences)).Methods(http.MethodGet)
LOWserver/api/users.go121 auditRec.Success()
LOWserver/api/users.go141 // required: false
LOWserver/api/users.go201 jsonBytesResponse(w, http.StatusOK, userData)
LOWserver/api/users.go261 // - name: userID
LOWserver/api/users.go321 // swagger:operation PATCH /users/{userID}/config updateUserConfig
LOWserver/api/users.go401 // - application/json
LOWserver/api/config.go21 // produces:
LOWserver/api/system.go21 // ---
LOWserver/api/files.go81}
LOWserver/api/files.go101 // in: path
LOWserver/api/files.go241 w.Header().Set("X-Frame-Options", "DENY")
LOWserver/api/files.go261 // - name: boardID
LOWserver/api/files.go321func (a *API) handleUploadFile(w http.ResponseWriter, r *http.Request) {
LOWserver/api/files.go341 // type: string
LOWserver/api/sharing.go21 r.HandleFunc("/boards/{boardID}/sharing", a.sessionRequired(a.handleGetSharing)).Methods("GET")
LOWserver/api/sharing.go81 mlog.String("shareID", sharing.ID),
LOWserver/api/sharing.go101 // required: true
LOWserver/api/auth.go21 // personal-server specific routes. These are not needed in plugin mode.
LOWserver/api/auth.go41 // required: true
LOWserver/api/auth.go101 }
LOWserver/api/auth.go161 // parameters:
79 more matches not shown…
Hyper-Verbose Identifiers17 hits · 17 pts
SeverityFileLineSnippet
LOWexperiments/webext/src/views/OptionsApp.tsx53 function onAuthenticateButtonClicked(event: MouseEvent) {
LOWwebapp/src/boardUtils.ts55export function getVisibleAndHiddenGroups(cards: Card[], visibleOptionIds: string[], hiddenOptionIds: string[], groupByP
LOWwebapp/src/blocks/boardView.ts59function sortBoardViewsAlphabetically(views: BoardView[]): BoardView[] {
LOWwebapp/src/blocks/board.ts200function createCardPropertiesPatches(newCardProperties: IPropertyTemplate[], oldCardProperties: IPropertyTemplate[]): Bo
LOWwebapp/src/blocks/board.ts288function createPatchesFromBoardsAndBlocks(updatedBoard: Board, oldBoard: Board, updatedBlockIDs: string[], updatedBlocks
LOWwebapp/src/components/calendar/fullCalendar.tsx47function createDatePropertyFromCalendarDates(start: Date, end: Date): DateProperty {
LOWwebapp/src/components/calendar/fullCalendar.tsx61function createDatePropertyFromCalendarDate(start: Date): DateProperty {
LOW…app/src/components/cardDetail/cardDetailProperties.tsx53 function onPropertyChangeSetAndOpenConfirmationDialog(newType: PropertyType, newName: string, propertyTemplate: IPro
LOW…app/src/components/cardDetail/cardDetailProperties.tsx103 function onPropertyDeleteSetAndOpenConfirmationDialog(propertyTemplate: IPropertyTemplate) {
LOW…rc/components/cardDetail/cardDetailProperties.test.tsx248 function openDeleteConfirmationDialog(container: HTMLElement) {
LOW…rc/components/cardDetail/cardDetailProperties.test.tsx261 function onPropertyRenameNoConfirmationDialog(container: HTMLElement) {
LOW…c/components/kanban/calculation/calculationOptions.tsx26export function getEquivalentPropertyType(propertyType: PropertyTypeEnum): PropertyTypeEnum {
LOWwebapp/src/components/calculations/calculations.ts40function fixTimestampToMinutesAccuracy(timestamp: number) {
LOWwebapp/src/components/calculations/calculations.ts268function getTimestampsFromPropertyValue(value: number | string | string[]): number[] {
LOWwebapp/src/properties/date/date.tsx33export function createDatePropertyFromString(initialValue: string): DateProperty {
LOWwebapp/src/properties/multiselect/multiselect.test.tsx20function buildMultiSelectPropertyTemplate(options: IPropertyOption[] = []): IPropertyTemplate {
LOWimport/jira/jiraImporter.ts186function buildCardPropertyFromValues(propertyName: string, allValues: string[]) {
Synthetic Comment Markers2 hits · 15 pts
SeverityFileLineSnippet
HIGHwin-wpf/Focalboard/Properties/Settings.Designer.cs3// This code was generated by a tool.
HIGHwin-wpf/Focalboard/Properties/Resources.Designer.cs3// This code was generated by a tool.
Verbosity Indicators4 hits · 6 pts
SeverityFileLineSnippet
LOWwebapp/cypress/integration/manageGroups.ts58 // Step 1: Create an empty board and add a group
LOWwebapp/cypress/integration/manageGroups.ts72 // Step 2: Click on the three dots next to "Group 1"
LOWwebapp/cypress/integration/manageGroups.ts86 // Step 3: Click on "Hide"
LOWwebapp/cypress/integration/manageGroups.ts91 // Step 4: Click "Group 1", then click "Show" in the dropdown
Fake / Example Data2 hits · 2 pts
SeverityFileLineSnippet
LOW…bapp/src/components/calculations/calculations.test.tsx16 card1.fields.properties.property_text = 'lorem ipsum'
LOW…bapp/src/components/calculations/calculations.test.tsx56 card4.fields.properties.property_text = 'lorem ipsum'