Grist is the evolution of spreadsheets.
This report presents the forensic synthetic code analysis of gristlabs/grist-core, a TypeScript project with 11,276 GitHub stars. SynthScan v2.0 examined 520,212 lines of code across 1890 source files, recording 1100 pattern matches distributed across 22 syntactic categories. The overall adjusted score of 3.3 places this repository in the Likely human-written band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1100 distinct pattern matches across 22 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/plugin/grist-plugin-api.ts | 276 | export async function testWaitForPendingRequests() { | CODE |
| LOW | app/plugin/grist-plugin-api.ts | 621 | function getCssScrollbarProperties(appearance: "light" | "dark") { | CODE |
| LOW | app/plugin/grist-plugin-api.ts | 634 | function getOrCreateStyleElement(id: string) { | CODE |
| LOW | app/server/utils/pruneActionHistory.ts | 42 | export async function pruneActionHistoryFromConsole(argv: string[]): Promise<number> { | CODE |
| LOW | app/server/lib/sessionUtils.ts | 115 | export function getDocSessionAccessOrNull(docSession: OptDocSession): Role | null { | CODE |
| LOW | app/server/lib/DocSession.ts | 80 | export function makeExceptionalDocSession(mode: "nascent" | "plugin" | "system" | "share", | CODE |
| LOW | app/server/lib/gristSessions.ts | 60 | function createSessionStoreFactory(sessionsDB: string): () => SessionStore { | CODE |
| LOW | app/server/lib/gristSessions.ts | 104 | export function getAllowedOrgForSessionID(sessionID: string): { org: string, host: string } | null { | CODE |
| LOW | app/server/lib/configureMinIOExternalStorage.ts | 15 | export function configureMinIOExternalStorage(purpose: "doc" | "meta" | "attachments", extraPrefix: string) { | CODE |
| LOW | app/server/lib/configureMinIOExternalStorage.ts | 25 | export function checkMinIOExternalStorage() { | CODE |
| LOW | app/server/lib/OIDCConfig.ts | 152 | export function readOIDCConfigFromSettings(settings: AppSettings): OIDCConfig { | CODE |
| LOW⚡ | app/server/lib/AttachmentStoreProvider.ts | 116 | async function isAttachmentStoreOptionAvailable(option: ICreateAttachmentStoreOptions) { | CODE |
| LOW⚡ | app/server/lib/AttachmentStoreProvider.ts | 125 | function storeOptionIsNotUndefined( | CODE |
| LOW⚡ | app/server/lib/AttachmentStoreProvider.ts | 131 | export async function checkAvailabilityAttachmentStoreOptions( | CODE |
| LOW | app/server/lib/AttachmentStoreProvider.ts | 146 | export async function makeTempFilesystemStoreSpec( | CODE |
| LOW | app/server/lib/AttachmentStoreProvider.ts | 168 | export function getConfiguredStandardAttachmentStore(): string | undefined { | CODE |
| LOW | app/server/lib/AttachmentStoreProvider.ts | 188 | export async function getConfiguredAttachmentStoreConfigs( | CODE |
| LOW | app/server/lib/serverUtils.ts | 147 | export function getSupportedEngineChoices(): EngineCode[] { | CODE |
| LOW | app/server/lib/AssistantStatePermit.ts | 36 | export async function getAndRemoveAssistantStatePermit( | CODE |
| LOW | app/server/lib/AssistantStatePermit.ts | 36 | export async function getAndRemoveAssistantStatePermit( | CODE |
| LOW | app/server/lib/UserPresence.ts | 128 | function getVisibleUserProfileFromDocSession( | CODE |
| LOW | app/server/lib/DiscourseConnect.ts | 100 | export function addDiscourseConnectEndpoints(app: Express, options: { | CODE |
| LOW | app/server/lib/SamlConfig.ts | 101 | export function readSamlConfigFromSettings(settings: AppSettings): SamlConfig { | CODE |
| LOW | app/server/lib/GoogleAuth.ts | 92 | export async function googleAuthTokenMiddleware( | CODE |
| LOW | app/server/lib/uploads.ts | 146 | export async function parseMultipartFormRequest( | CODE |
| LOW | app/server/lib/backupSqliteDatabase.ts | 221 | export async function backupUsingBestConnection( | CODE |
| LOW | app/server/lib/ProxyAgent.ts | 24 | export function getProxyAgentConfiguration() { | CODE |
| LOW | app/server/lib/ProxyAgent.ts | 63 | export function isUntrustedRequestBehaviorSet() { | CODE |
| LOW | app/server/lib/updateChecker.ts | 37 | export async function updateGristServerLatestVersion( | CODE |
| LOW | app/server/lib/loginSystemHelpers.ts | 21 | export function getActiveLoginSystemTypeSource(settings: AppSettings) { | CODE |
| LOW | app/server/lib/loginSystemHelpers.ts | 44 | export function createLoginProviderFactory( | CODE |
| LOW | app/server/lib/ActionHistory.ts | 230 | function getActionUndoInfoWithoutClient(act: LocalActionBundle, retValues?: any[]) { | CODE |
| LOW | app/server/lib/ExpandedQuery.ts | 135 | export function getFormulaErrorForExpandQuery(docData: DocData, tableId: string, colId: string): CellValue { | CODE |
| LOW | app/server/lib/idUtils.ts | 48 | export function getExternalIdForAppSumoUser(email: string) { | CODE |
| LOW | app/server/lib/UpdateManager.ts | 195 | export async function getLatestStableDockerVersion(signal: AbortSignal): Promise<LatestVersion> { | CODE |
| LOW | app/server/lib/OAuth2Clients.ts | 383 | function renderEndFlowHtmlTemplate(payload: object, openerOrigin: string) { | CODE |
| LOW | app/server/lib/sendAppPage.ts | 244 | function logVisitedPageTelemetryEvent(req: RequestWithLogin, options: LogVisitedPageEventOptions) { | CODE |
| LOW | app/server/lib/sendAppPage.ts | 291 | function getPermittedCustomWidgets(gristServer?: GristServer | null): IAttachedCustomWidget[] { | CODE |
| LOW | app/server/lib/sendAppPage.ts | 313 | function configuredPageTitleSuffix() { | CODE |
| LOW | app/server/lib/sendAppPage.ts | 339 | function getPageMetadataHtmlSnippet(req: express.Request, config: GristLoadConfig): string { | CODE |
| LOW | app/server/lib/DocWorkerUtils.ts | 156 | export async function getDocWorkerInfoOrSelfPrefix( | CODE |
| LOW | app/server/lib/DocManager.ts | 805 | async function updateDocumentAttachmentStoreSettingToValidValue(fname: string, provider: IAttachmentStoreProvider) { | CODE |
| LOW | app/server/lib/DocManager.ts | 822 | async function updateDocumentSettingsInPlace( | CODE |
| LOW | app/server/lib/dbUtils.ts | 78 | export async function getOrCreateConnection(): Promise<DataSource> { | CODE |
| LOW | app/server/lib/configCoreFileFormats.ts | 39 | export function convertToCoreFileContents(input: any): IGristCoreConfigFileLatest | null { | CODE |
| LOW | app/server/lib/GranularAccess.ts | 83 | function isAddOrUpdateRecordAction([actionName]: UserAction): boolean { | CODE |
| LOW | app/server/lib/GranularAccess.ts | 3339 | async function applyToActionsRecursively(actions: (DocAction | UserAction)[], | CODE |
| LOW | app/server/lib/requestUtils.ts | 495 | export function clearSessionCacheIfNeeded(req: Request, options?: { | CODE |
| LOW | app/server/lib/requestUtils.ts | 527 | export function getExtraAttachmentOptions(req: Request): { | CODE |
| LOW | app/server/lib/CellDataAccess.ts | 40 | export async function applyAndCheckActionsForCells( | CODE |
| LOW | app/server/lib/GetGristComConfig.ts | 24 | export function readGetGristComConfigFromSettings(settings: AppSettings): OIDCConfig { | CODE |
| LOW | app/server/lib/GetGristComConfig.ts | 61 | function getDecodedGetGristSecretJson(settings: AppSettings) { | CODE |
| LOW | app/server/lib/gristSettings.ts | 104 | export function getAnonPlaygroundEnabledSource(): AppSettingSource | undefined { | CODE |
| LOW | app/server/lib/gristSettings.ts | 154 | export function getCanAnyoneCreateOrgsSource(): AppSettingSource | undefined { | CODE |
| LOW | app/server/lib/gristSettings.ts | 173 | export function getPersonalOrgsEnabledSource(): AppSettingSource | undefined { | CODE |
| LOW | app/server/lib/gristSettings.ts | 339 | export function invalidateReloadableSettings(...envVars: string[]) { | CODE |
| LOW | app/server/lib/gristSettings.ts | 347 | export function invalidateAllReloadableSettings() { | CODE |
| LOW | app/server/lib/DocApiTriggers.ts | 145 | async function extractAndUpdateActionSecret( | CODE |
| LOW | app/server/lib/attachEarlyEndpoints.ts | 315 | function logCreateOrUpdateConfigEvents( | CODE |
| LOW | app/server/lib/ExportTableSchema.ts | 37 | export async function collectTableSchemaInFrictionlessFormat( | CODE |
| 471 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …t-traefik-oidc-auth/configs/authelia/configuration.yml | 10 | #------------------------------------------------------------------------------ | COMMENT |
| MEDIUM | sandbox/grist/test_engine.py | 413 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_engine.py | 415 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_engine.py | 443 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_engine.py | 445 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | sandbox/grist/useractions.py | 2540 | #---------------------------------------- | COMMENT |
| MEDIUM⚡ | sandbox/grist/useractions.py | 2542 | #---------------------------------------- | COMMENT |
| MEDIUM⚡ | sandbox/grist/useractions.py | 2569 | #-------------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | sandbox/grist/useractions.py | 2571 | #-------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 306 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 308 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 382 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 384 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 508 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 510 | # ---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 1244 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 1246 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 1551 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 1553 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 2109 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 2111 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 2484 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 2486 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 2616 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 2618 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/codebuilder.py | 272 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/codebuilder.py | 512 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_lookups.py | 28 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_lookups.py | 78 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_lookups.py | 101 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_lookups.py | 150 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_lookups.py | 171 | #---------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/lookup.py | 167 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/lookup.py | 226 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/lookup.py | 359 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | sandbox/grist/test_useractions.py | 134 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_useractions.py | 35 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_useractions.py | 194 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_useractions.py | 268 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_useractions.py | 354 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_useractions.py | 397 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_useractions.py | 534 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_useractions.py | 599 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_useractions.py | 638 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_useractions.py | 767 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_useractions.py | 816 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_useractions.py | 856 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | sandbox/grist/test_summary_choicelist.py | 37 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_summary2.py | 164 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_summary2.py | 474 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_summary2.py | 559 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_summary2.py | 883 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_summary2.py | 947 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_summary2.py | 1030 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_summary2.py | 1077 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_summary2.py | 1196 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_summary2.py | 1251 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_table_actions.py | 127 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_table_actions.py | 203 | #---------------------------------------------------------------------- | COMMENT |
| MEDIUM | sandbox/grist/test_table_actions.py | 251 | #---------------------------------------------------------------------- | COMMENT |
| 33 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | app/client/ui/ProposedChangesPage.ts | 499 | const tableRow = this._gristDoc.docModel.tables.rowModels.find(tr => tr?.tableId() === table); | CODE |
| CRITICAL | app/client/ui/ProposedChangesPage.ts | 500 | const columnRows = tableRow ? this._gristDoc.docModel.columns.rowModels.filter( | CODE |
| CRITICAL | app/client/ui/DocumentSettings.ts | 439 | this._gristDoc.app.topAppModel.notifier.createNotification({ | CODE |
| CRITICAL | app/client/ui/WebhookPage.ts | 349 | public docApi = this.gristDoc.docPageModel.appModel.api.getDocAPI(this.gristDoc.docId()); | CODE |
| CRITICAL | app/client/ui/Tools.ts | 60 | owner.autoDispose(gristDoc.docModel.rules.tableData.tableActionEmitter.addListener(updateCanViewAccessRules)); | CODE |
| CRITICAL | app/client/ui/TimingPage.ts | 73 | const docApi = this._gristDoc.docPageModel.appModel.api.getDocAPI(this._gristDoc.docId()); | CODE |
| CRITICAL | app/client/components/VirtualDoc.ts | 680 | const fieldsIds = this._doc.docModel.viewFields.tableData.filterRowIds( | CODE |
| CRITICAL | app/client/components/VirtualDoc.ts | 829 | const fieldsIds = this._doc.docModel.viewFields.tableData.filterRowIds( | CODE |
| CRITICAL | app/client/components/RawDataPage.ts | 35 | const emptyView = this._gristDoc.docModel.views.rowModels.find(x => x.id.peek() === undefined); | CODE |
| CRITICAL | app/client/components/WidgetFrame.ts | 291 | const widgets = await this._options.gristDoc.app.topAppModel.getWidgets(); | CODE |
| CRITICAL | app/client/components/Forms/FormView.ts | 403 | const userId = this.gristDoc.app.topAppModel.appObs.get()?.currentUser?.id || 0; | CODE |
| CRITICAL | app/client/widgets/FieldEditor.ts | 152 | const app = this._gristDoc.app.topAppModel.appObs.get(); | CODE |
| CRITICAL | app/client/widgets/DiscussionEditor.ts | 819 | const currentUserAccess = this.props.gristDoc.docPageModel.currentDoc.get()?.access; | CODE |
| CRITICAL | sandbox/grist/test_useractions.py | 1655 | rules = self.engine.docmodel.columns.table.get_record(23).rules | CODE |
| CRITICAL | sandbox/grist/test_useractions.py | 1857 | new_section = self.engine.docmodel.view_sections.table.get_record(result.retValues[0]['sectionRef']) | CODE |
| CRITICAL | sandbox/grist/test_useractions.py | 1870 | enabled_section = self.engine.docmodel.view_sections.table.get_record(result.retValues[0]['sectionRef']) | CODE |
| CRITICAL | sandbox/grist/test_undo.py | 46 | for r in self.engine.docmodel.tables.table.filter_records()], [ | CODE |
| CRITICAL | sandbox/grist/test_undo.py | 79 | for r in self.engine.docmodel.tables.table.filter_records()], [ | CODE |
| CRITICAL | sandbox/grist/test_twoway_refs.py | 221 | projects_table = self.engine.docmodel.tables.table.get_record(2) | CODE |
| CRITICAL⚡ | sandbox/grist/test_rules.py | 38 | rules = self.engine.docmodel.columns.table.get_record(col_id).rules | CODE |
| CRITICAL⚡ | sandbox/grist/test_rules.py | 44 | rules = self.engine.docmodel.view_fields.table.get_record(field_id).rules | CODE |
| CRITICAL⚡ | sandbox/grist/test_rules.py | 50 | rules = self.engine.docmodel.columns.table.get_record(col_id).rules | CODE |
| CRITICAL⚡ | sandbox/grist/test_rules.py | 55 | rules = self.engine.docmodel.view_fields.table.get_record(field_id).rules | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …t-traefik-oidc-auth/configs/authelia/configuration.yml | 7 | ## This file is an edited version to support Grist as an OIDC client ## | COMMENT |
| MEDIUM | sandbox/gvisor/update_engine_checkpoint.sh | 3 | # Create a checkpoint of a gvisor sandbox. It is best to make the | COMMENT |
| MEDIUM | sandbox/grist/test_sort_key.py | 45 | # Create a simple table (People) with a couple records. | COMMENT |
| MEDIUM | sandbox/grist/test_sort_key.py | 52 | # Create a separate table that does a lookup in the People table. | COMMENT |
| MEDIUM | sandbox/grist/test_dropdown_condition_renames.py | 65 | # Create a similar column with an invalid dropdown condition formula. | COMMENT |
| MEDIUM | sandbox/grist/test_dropdown_condition_renames.py | 162 | # Create a column with None for widget options. Just a presence of such a column was causing | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 914 | # Create a patch and append to the list for this col_rec. | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 2199 | # Create a primary view | COMMENT |
| MEDIUM | sandbox/grist/useractions.py | 2498 | # Create the raw view for the new table, with a field for each column. | COMMENT |
| MEDIUM | sandbox/grist/test_table_data_set.py | 16 | # Create a test_* method for each case in testscript, which runs `self._run_test_body()`. | COMMENT |
| MEDIUM | sandbox/grist/lookup.py | 315 | # Create a key in the index for every combination of values in columns | COMMENT |
| MEDIUM⚡ | sandbox/grist/test_useractions.py | 141 | # Create a view + section for the initial table. | COMMENT |
| MEDIUM⚡ | sandbox/grist/test_useractions.py | 151 | # Create a new section for the same view, check that only a section is added. | COMMENT |
| MEDIUM | sandbox/grist/test_useractions.py | 1461 | # Create a new table which automatically gets a raw view section | COMMENT |
| MEDIUM | sandbox/grist/test_useractions.py | 1617 | # Create a new table, Table1, and populate it with some data. | COMMENT |
| MEDIUM⚡ | sandbox/grist/test_summary_choicelist.py | 47 | # Create a summary section, grouped by the "choices1" column. | COMMENT |
| MEDIUM | sandbox/grist/test_summary_choicelist.py | 340 | # Create a summary section, grouped by the "choices1" column. | COMMENT |
| MEDIUM | sandbox/grist/test_summary_choicelist.py | 379 | # Create a summary section, grouped by both choicelist columns. | COMMENT |
| MEDIUM | sandbox/grist/summary.py | 399 | # Create the new table. | COMMENT |
| MEDIUM | sandbox/grist/test_summary2.py | 1207 | # Create a summary of the detached table (tableRef 3) by state (colRef 21). | COMMENT |
| MEDIUM⚡ | sandbox/grist/engine.py | 208 | # Create the formula tracer that can be overridden to trace formula evaluations. It is called | COMMENT |
| MEDIUM⚡ | sandbox/grist/engine.py | 212 | # Create the object that knows how to interpret UserActions. | COMMENT |
| MEDIUM⚡ | sandbox/grist/engine.py | 215 | # Create the object that knows how to interpret UserActions. | COMMENT |
| MEDIUM | sandbox/grist/engine.py | 360 | # Create the new records. | COMMENT |
| MEDIUM | sandbox/grist/test_renames2.py | 22 | # Create a schema with several tables including some references and lookups. | COMMENT |
| MEDIUM | sandbox/grist/timing.py | 51 | # Create a marks array for the last node or append to the existing one. | COMMENT |
| MEDIUM | sandbox/grist/test_display_cols.py | 280 | # Create a display column. | COMMENT |
| MEDIUM | sandbox/grist/test_table_actions.py | 355 | # Create a summary table of People grouped by address (a reference column). | COMMENT |
| MEDIUM | sandbox/grist/test_lookup_find.py | 188 | # Create a simple table (People) with a couple records. | COMMENT |
| MEDIUM | sandbox/grist/test_lookup_find.py | 195 | # Create a separate table that does a lookup in the People table. | COMMENT |
| MEDIUM | sandbox/grist/migrations.py | 561 | # Create the ACL table AND also the default ACL groups, default resource, and the default rule. | COMMENT |
| MEDIUM | sandbox/grist/test_trigger_expression.py | 188 | # Create a table so the trigger has a valid tableRef. | COMMENT |
| MEDIUM | sandbox/grist/test_trigger_expression.py | 285 | # Create a table with columns for tests | COMMENT |
| MEDIUM⚡ | sandbox/grist/test_summary.py | 86 | # Create a view + section for the initial table. | COMMENT |
| MEDIUM | sandbox/grist/test_summary.py | 131 | # Create a summary section, grouped by the "State" column. | COMMENT |
| MEDIUM | sandbox/grist/test_summary.py | 172 | # Create a summary section grouped by two columns ("city" and "state"). | COMMENT |
| MEDIUM | sandbox/grist/test_summary.py | 257 | # Create a summary section grouped by two columns ("city" and "state"). | COMMENT |
| MEDIUM | sandbox/grist/table.py | 292 | # Create a type with a property for each column. We use property-methods rather than | COMMENT |
| MEDIUM | sandbox/grist/table.py | 397 | # Create a row in the summary table for every combination of values in | COMMENT |
| MEDIUM | sandbox/grist/test_summary_undo.py | 32 | # Create a summary section, grouped by the "State" column. | COMMENT |
| MEDIUM | sandbox/grist/test_derived.py | 59 | # Create a derived table summarizing count and total of orders by year. | COMMENT |
| MEDIUM | sandbox/grist/test_derived.py | 195 | # Create a summary on the Customers table. Adding orders involves a lookup for each customer. | COMMENT |
| MEDIUM | sandbox/grist/test_derived.py | 206 | # # Create the same summary on the Orders table, looking up 'state' via the Customer reference. | COMMENT |
| MEDIUM | sandbox/grist/test_derived.py | 265 | # Create a summary table summarizing count and total of orders by year. | COMMENT |
| MEDIUM | sandbox/grist/test_completion.py | 46 | # Create a summary table of Students grouped by school | COMMENT |
| MEDIUM | sandbox/grist/functions/date.py | 735 | # This function is actually completely crazy. The rules are strange too. We'll follow the logic | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | buildtools/webpack.config.js | 41 | // Workaround for a known issue with webpack + onerror under chrome, see: | COMMENT |
| LOW | buildtools/update_schema.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | buildtools/install_edition.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | app/plugin/grist-plugin-api.ts | 1 | // Provide a way to access grist for iframe, web worker (which runs the main safeBrowser script) and | COMMENT |
| LOW | app/server/lib/PermissionInfo.ts | 241 | // - partial permissions are merged, so denySome + deny = deny, and allowSome + allow = allow. | COMMENT |
| LOW | app/server/lib/runSQLQuery.ts | 61 | // The underlying SQLite functions used will only process the | COMMENT |
| LOW | app/server/lib/DocManager.ts | 381 | // If opening in (pre-)fork mode, check if it is appropriate to treat the user as | COMMENT |
| LOW | app/server/lib/dbUtils.ts | 81 | // share the database connection. This saves locking trouble | COMMENT |
| LOW | app/server/lib/ExternalStorage.ts | 41 | // Upload content from file to the given key. Returns a snapshotId if store supports that. | COMMENT |
| LOW | app/server/lib/GranularAccess.ts | 981 | // retaining only permitted material. | COMMENT |
| LOW | app/server/lib/GranularAccess.ts | 1481 | // we've hit something unexpected - perhaps a UserAction has been added | COMMENT |
| LOW | app/server/lib/GranularAccess.ts | 2081 | await this._getAccess(docSession); // Makes sure user attrs have actually been computed. | COMMENT |
| LOW | app/server/lib/GranularAccess.ts | 2281 | if (applied) { | COMMENT |
| LOW | app/server/lib/WebhookQueue.ts | 121 | export class WebhookQueue implements ActionQueue<WebhookActionPayload> { | COMMENT |
| LOW | app/server/lib/SQLiteDB.ts | 101 | // in the 'create' function, and added as new entries in the 'migrations' array. Existing | COMMENT |
| LOW | app/server/lib/FlexServer.ts | 1281 | await this._dbManager.updateUser(user.id, { isFirstTimeUser: false }); | COMMENT |
| LOW | app/server/lib/FlexServer.ts | 2461 | // Get access to the clients of this document. This has the side | COMMENT |
| LOW | app/server/lib/FlexServer.ts | 2861 | // Then, there was a complicated issue: | COMMENT |
| LOW | app/server/lib/SandboxPyodide.ts | 41 | // personally and disruption in the name of security could seem unreasonable. | COMMENT |
| LOW | app/server/lib/DocStorage.ts | 521 | if (affinity === "TEXT" || affinity === "BLOB") { return val; } | COMMENT |
| LOW | app/server/lib/DocStorage.ts | 721 | // including generating unwanted extra files that can be tricky to deal with in renaming, etc | COMMENT |
| LOW | app/server/lib/Authorizer.ts | 441 | // Modify request session object to link the current org with our choice of | COMMENT |
| LOW | app/server/lib/Triggers.ts | 101 | COMMENT | |
| LOW | app/server/lib/workerExporter.ts | 281 | // which under Electron will deal fine with Electron's ASAR | COMMENT |
| LOW | app/server/lib/ICreate.ts | 41 | // to hijack a session to only guessing the session ID (as | COMMENT |
| LOW | app/common/BillingAPI.ts | 81 | tiers: ILimitTier[]; | COMMENT |
| LOW | app/common/BillingAPI.ts | 101 | // The next total in cents that Stripe is going to charge (includes tax and discount). | COMMENT |
| LOW | app/common/LinkNode.ts | 261 | } | COMMENT |
| LOW | app/gen-server/lib/TypeORMPatches.ts | 1 | // This contains two TypeORM patches. | COMMENT |
| LOW | app/gen-server/lib/homedb/HomeDBManager.ts | 2481 | // TODO: Consider updating to traverse through the doc groups and their nested groups for | COMMENT |
| LOW | app/gen-server/lib/homedb/HomeDBManager.ts | 2521 | const doc = await this._loadDocAccess({ ...scope, urlId: trunkId }, Permissions.VIEW); | COMMENT |
| LOW | app/gen-server/lib/homedb/HomeDBManager.ts | 4641 | if (moveTo) { | COMMENT |
| LOW | app/gen-server/lib/homedb/HomeDBManager.ts | 4721 | // Normalize query results in the following ways: | COMMENT |
| LOW | app/gen-server/lib/homedb/HomeDBManager.ts | 4881 | const idColumn = resType.slice(0, -1) + "_id"; | COMMENT |
| LOW | app/gen-server/lib/homedb/HomeDBManager.ts | 4901 | COMMENT | |
| LOW | app/gen-server/lib/homedb/HomeDBManager.ts | 4961 | } | COMMENT |
| LOW | …erver/migration/1764872085347-OAuthClientsAndGrants.ts | 21 | // Core client properties. | COMMENT |
| LOW | app/client/apiconsole.ts | 161 | } | COMMENT |
| LOW | app/client/apiconsole.ts | 301 | COMMENT | |
| LOW | app/client/ui/UserItem.ts | 1 | import { colors, theme, vars } from "app/client/ui2018/cssVars"; | COMMENT |
| LOW | app/client/models/errors.ts | 81 | return reportMessage(msg, { level: "success", ...options }); | COMMENT |
| LOW | app/client/models/ViewFieldConfig.ts | 41 | // Make extra sure that field and column is not disposed, most of the knockout | COMMENT |
| LOW | app/client/models/entities/ViewSectionRec.ts | 101 | // a grid section and a chart section). | COMMENT |
| LOW | app/client/components/UndoStack.ts | 141 | if (!ag) { return; } | COMMENT |
| LOW | app/client/components/Printing.ts | 41 | // continue on to trying to print from outside, which should work OK for a single page. | COMMENT |
| LOW | app/client/components/RecordLayout.js | 1 | /** | COMMENT |
| LOW | app/client/components/TypeConversion.ts | 121 | if (isReferenceCol(origCol)) { | COMMENT |
| LOW | app/client/components/LinkingState.ts | 41 | COMMENT | |
| LOW | app/client/components/LinkingState.ts | 121 | // If srcCol is the empty col, is a row->col filter (i.e. id -> tgtCol) | COMMENT |
| LOW | app/client/components/LinkingState.ts | 181 | COMMENT | |
| LOW | app/client/components/LinkingState.ts | 201 | // | COMMENT |
| LOW | app/client/components/LinkingState.ts | 221 | // (i.e. two sections back) instead of looking at our srcSection's activeRowId. This way it doesn't matter how | COMMENT |
| LOW | app/client/components/LinkingState.ts | 241 | // Once the incomingCursorPos-es are determined correctly, the cursorPos-es just need to pull out the rowId, | COMMENT |
| LOW | app/client/components/LinkingState.ts | 381 | // or null if the rowId is "new" | COMMENT |
| LOW | app/client/components/LinkingState.ts | 461 | // ==== Determine operation to use for filter ==== | COMMENT |
| LOW | app/client/components/LinkingState.ts | 481 | COMMENT | |
| LOW | app/client/components/LayoutTray.ts | 621 | // The content of the leaf that is rendered. Stored in an observable so that we can update it when the | COMMENT |
| LOW | app/client/components/GridView.ts | 281 | // helper for clarity | COMMENT |
| LOW | app/client/components/GridView.ts | 301 | // Final check - we actually don't want to have | COMMENT |
| LOW | app/client/components/GridView.ts | 1601 | // when implementing selection and cell editor. | COMMENT |
| 101 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | storybook/authenticationSection.stories.ts | 16 | adminEmail: "admin@example.com", | CODE |
| LOW | app/client/ui/RightPanel.ts | 1077 | dom.prop("placeholder", use => use(field.displayLabel) || use(field.colId)), | CODE |
| LOW | app/client/ui/ColumnFilterMenu.ts | 228 | "placeholder": t("Search values"), | CODE |
| LOW | app/client/ui/searchDropdown.ts | 146 | "placeholder": this._options.placeholder || t("Search"), | CODE |
| LOW | app/client/ui/SetupCard.ts | 37 | * dom("span", "Installation admin:", dom("strong", "admin@example.com")), | COMMENT |
| LOW | app/client/ui/DescriptionConfig.ts | 137 | dom.prop("placeholder", options.placeholder || ""), | CODE |
| LOW | app/client/ui2018/search.ts | 221 | "placeholder": t("Search in document"), | CODE |
| LOW | app/client/widgets/NumericSpinner.ts | 70 | defaultValue !== undefined ? dom.prop("placeholder", defaultValue) : null, | CODE |
| LOW | app/client/widgets/TextEditor.js | 46 | kd.attr("placeholder", options.placeholder || ""), | CODE |
| LOW | app/client/widgets/DateTimeEditor.ts | 68 | dom.attr("placeholder", placeholder), | CODE |
| LOW | app/client/widgets/DateEditor.ts | 47 | this.textInput.setAttribute("placeholder", placeholder); | CODE |
| LOW | app/client/widgets/HyperLinkEditor.ts | 14 | this.textInput.setAttribute("placeholder", t("[link label] url")); | CODE |
| LOW | app/client/widgets/Assistant.ts | 309 | dom.prop("placeholder", (use) => { | CODE |
| LOW | test/projects/filterUtils.ts | 64 | (await bound.find("input").getAttribute("placeholder")).trim(); | CODE |
| LOW | test/server/lib/OIDCConfig.ts | 451 | email: "fake-email", | CODE |
| LOW | test/server/lib/OIDCConfig.ts | 452 | name: "fake-name", | CODE |
| LOW | test/server/lib/OIDCConfig.ts | 640 | email: "fake-email", | CODE |
| LOW | test/server/lib/OIDCConfig.ts | 675 | email: "fake-email", | CODE |
| LOW | test/server/lib/OIDCConfig.ts | 676 | name: "fake-name", | CODE |
| LOW | test/server/lib/OIDCConfig.ts | 691 | email: "fake-email", | CODE |
| LOW | test/server/lib/OIDCConfig.ts | 692 | name: "fake-name", | CODE |
| LOW | test/server/lib/OIDCConfig.ts | 707 | email: "fake-email", | CODE |
| LOW | test/server/lib/OIDCConfig.ts | 708 | name: "fake-name", | CODE |
| LOW | test/server/lib/OIDCConfig.ts | 754 | token_type: "fake-token-type", | CODE |
| LOW | test/server/lib/docapi/DocApiWebhooks.ts | 1554 | await check({ authorization: "Bearer fake-token" }, 200); | CODE |
| LOW⚡ | test/client/lib/textUtils.ts | 26 | check("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. " + | CODE |
| LOW⚡ | test/client/lib/textUtils.ts | 26 | check("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. " + | CODE |
| LOW⚡ | test/client/lib/textUtils.ts | 34 | "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. " + | CODE |
| LOW⚡ | test/client/lib/textUtils.ts | 34 | "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. " + | CODE |
| LOW⚡ | test/client/lib/textUtils.ts | 40 | "Nullam dictum felis eu pede mollis pretium. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. " + | CODE |
| LOW⚡ | test/client/lib/textUtils.ts | 40 | "Nullam dictum felis eu pede mollis pretium. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. " + | CODE |
| LOW⚡ | test/client/lib/ACIndex.ts | 281 | const acIndex = new ACIndexImpl(["Lorem ipsum 𝌆 dolor sit ameͨ͆t.", "mañana", "Москва"].map(makeItem), { | CODE |
| LOW⚡ | test/client/lib/ACIndex.ts | 286 | [["", "Моск", "ва"], ["", "mañ", "ana"], ["Lorem ipsum 𝌆 dolor sit ", "am", "eͨ͆t."]]); | CODE |
| LOW⚡ | test/client/lib/ACIndex.ts | 294 | ["Lorem ipsum 𝌆 dolor sit ", original, "t."]); | CODE |
| LOW | test/nbrowser/ProposedChangesPage.ts | 1810 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do " + | CODE |
| LOW | test/nbrowser/ProposedChangesPage.ts | 1810 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do " + | CODE |
| LOW | test/nbrowser/AirtableImport.ts | 843 | Name: "Acme Corp", | CODE |
| LOW | test/nbrowser/BootPage.ts | 257 | await driver.find(".test-boot-page-email-input").doClear().sendKeys("admin@example.com"); | CODE |
| LOW | test/nbrowser/BootPage.ts | 262 | assert.deepEqual({ name, email }, { name: "admin", email: "admin@example.com" }); | CODE |
| LOW | test/nbrowser/RowHeights.ts | 65 | assert.equal(await driver.find(".test-row-height-max input").getAttribute("placeholder"), "auto"); | CODE |
| LOW | …-traefik-basic-auth/configs/traefik-dynamic-config.yml | 12 | # The default username is "test@example.org". The default password is "test". | COMMENT |
| LOW | …-traefik-oidc-auth/configs/authelia/users_database.yml | 13 | email: 'test@example.org' | CODE |
| LOW | sandbox/grist/functions/info.py | 287 | >>> ISEMAIL("John Doe") | CODE |
| LOW | sandbox/grist/functions/info.py | 298 | >>> ISEMAIL("foo@bar.com") # True, True | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/server/lib/BrowserSession.ts | 114 | // - "S": the user is signed in once; in this case an automatic signin can be unambiguous and seamless. | COMMENT |
| MEDIUM | app/server/lib/ConfigBackendAPI.ts | 81 | // providers, be more nuanced about setting this. | COMMENT |
| MEDIUM | app/server/lib/GranularAccess.ts | 96 | // Actions that won't be allowed (yet) for a user with nuanced access to a document. | COMMENT |
| MEDIUM | app/server/lib/GranularAccess.ts | 1501 | // There might be uses for applying AddOrUpdateRecord in a nuanced | COMMENT |
| MEDIUM | app/server/lib/FlexServer.ts | 215 | // This can be called to do a redirect to signin/signup in a nuanced situation. | COMMENT |
| MEDIUM | app/server/lib/Client.ts | 334 | // We have all the needed messages (possibly an empty array); can do a seamless reconnect. | COMMENT |
| MEDIUM | app/server/lib/ActiveDoc.ts | 2569 | this._fetchCache.clear(); // This could be more nuanced. | CODE |
| MEDIUM | app/client/ui/HomeLeftPane.ts | 109 | // be a bit more nuanced here, but as of today the menu isn't particularly useful | COMMENT |
| MEDIUM | app/client/components/GristWSConnection.ts | 139 | // 0. We keep track of them to allow for seamless reconnects. | COMMENT |
| MEDIUM | test/common/NumberFormat.ts | 10 | // useGrouping became more nuanced in recent node. | COMMENT |
| MEDIUM | test/nbrowser/QuickSetupAuth.ts | 58 | // provider row with a Configure button. Handle both so the helper is robust | COMMENT |
| MEDIUM | sandbox/docker_entrypoint.sh | 11 | # Try to setup permissions and de-elevate to a normal user. | COMMENT |
| LOW | sandbox/grist/test_lookup_perf.py | 91 | # Otherwise, we could just use statistics.linear_regression() | COMMENT |
| MEDIUM | sandbox/grist/testscript.json | 95 | // Essentially a duplicate of the UserAction, but as a DocAction. | COMMENT |
| LOW⚡ | sandbox/grist/useractions.py | 2531 | # TODO: Deprecated; should just use RemoveRecord('_grist_Views', view_id) | COMMENT |
| LOW⚡ | sandbox/grist/useractions.py | 2560 | # TODO: Deprecated; should just use RemoveRecord('_grist_Views_section', view_id) | COMMENT |
| LOW | sandbox/grist/summary.py | 49 | # not a valid json string, i.e. in tests), just return the original updates. | COMMENT |
| MEDIUM | sandbox/grist/functions/text.py | 731 | # This is not particularly robust, but makes an attempt to handle a number of cases: numbers, | STRING |
| LOW | .github/workflows/docker_latest.yml | 7 | # personal access tokens so we just use a cron job. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | sandbox/grist/test_lookup_perf.py | 14 | except Exception as e: | CODE |
| LOW | sandbox/grist/test_engine.py | 473 | except Exception as e: | CODE |
| LOW | sandbox/grist/test_table_data_set.py | 99 | except Exception as e: | CODE |
| LOW | sandbox/grist/autocomplete_context.py | 24 | except Exception as e: | CODE |
| LOW | sandbox/grist/autocomplete_context.py | 198 | except Exception: | CODE |
| LOW | sandbox/grist/autocomplete_context.py | 239 | except Exception: | CODE |
| MEDIUM | sandbox/grist/autocomplete_context.py | 21 | def is_grist_func(func): | CODE |
| MEDIUM | sandbox/grist/autocomplete_context.py | 236 | def repr_example(x): | CODE |
| LOW | sandbox/grist/sandbox.py | 149 | except Exception as e: | CODE |
| LOW | sandbox/grist/summary.py | 134 | except Exception: | CODE |
| LOW | sandbox/grist/engine.py | 1328 | except Exception as e: | CODE |
| LOW | sandbox/grist/engine.py | 1342 | except Exception: | CODE |
| LOW | sandbox/grist/engine.py | 1396 | except Exception: | CODE |
| LOW | sandbox/grist/engine.py | 1405 | except Exception: | CODE |
| LOW | sandbox/grist/acl.py | 104 | except Exception as e: | CODE |
| LOW | sandbox/grist/acl.py | 140 | except Exception as e: | CODE |
| LOW | sandbox/grist/migrations.py | 58 | except Exception: | CODE |
| LOW | sandbox/grist/migrations.py | 508 | except Exception: | CODE |
| LOW | sandbox/grist/migrations.py | 655 | except Exception: | CODE |
| LOW | sandbox/grist/parse_data.py | 42 | except Exception: | CODE |
| LOW | sandbox/grist/parse_data.py | 208 | except Exception: | CODE |
| MEDIUM | sandbox/grist/parse_data.py | 38 | def test(cls, value): | CODE |
| LOW | sandbox/grist/table_data_set.py | 32 | except Exception as e: | CODE |
| MEDIUM | sandbox/grist/table_data_set.py | 29 | def apply_doc_action(self, action): | CODE |
| LOW | sandbox/grist/usertypes.py | 169 | except Exception as e: | CODE |
| LOW | sandbox/grist/usertypes.py | 173 | except Exception: | CODE |
| LOW | sandbox/grist/usertypes.py | 370 | except Exception: | CODE |
| LOW | sandbox/grist/usertypes.py | 389 | except Exception: | CODE |
| LOW | sandbox/grist/usertypes.py | 496 | except Exception: | CODE |
| LOW | sandbox/grist/column.py | 402 | except Exception: | CODE |
| LOW | sandbox/grist/column.py | 613 | except Exception: | CODE |
| LOW | sandbox/grist/attribute_recorder.py | 57 | except Exception: | CODE |
| MEDIUM | sandbox/grist/attribute_recorder.py | 54 | def safe_repr(x): | CODE |
| LOW | sandbox/grist/objtypes.py | 135 | except Exception: | CODE |
| LOW | sandbox/grist/objtypes.py | 144 | except Exception: | CODE |
| LOW | sandbox/grist/objtypes.py | 216 | except Exception as e: | CODE |
| LOW | sandbox/grist/objtypes.py | 256 | except Exception as e: | CODE |
| LOW | sandbox/grist/imports/import_csv.py | 99 | except Exception as e: | CODE |
| LOW | sandbox/grist/functions/math.py | 895 | except Exception: | CODE |
| LOW | sandbox/grist/functions/info.py | 592 | except Exception: | STRING |
| LOW | sandbox/grist/functions/info.py | 630 | except Exception as e: | STRING |
| LOW | sandbox/grist/functions/info.py | 651 | except Exception: | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | app/client/components/GristDoc.ts | 288 | // One of the section can be expanded (as requested from the Layout), we will | COMMENT |
| HIGH | app/client/components/Layout.ts | 242 | // Normally, we just add a sibling as requested. | COMMENT |
| HIGH | test/gen-server/lib/scrubUserFromOrg.ts | 427 | // user2's access should be changed just as requested | COMMENT |
| HIGH | test/gen-server/lib/scrubUserFromOrg.ts | 449 | // user2's access should be changed just as requested | COMMENT |
| HIGH | sandbox/grist/test_useractions.py | 1600 | # Actually testing that the time is updated as requested | COMMENT |
| HIGH | sandbox/grist/table.py | 31 | # UserTables are only created in auto-generated code by using UserTable as decorator for a table | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | sandbox/grist/test_predicate_formula.py | 5 | CODE | |
| LOW | sandbox/grist/test_replay.py | 39 | CODE | |
| LOW | sandbox/grist/test_renames.py | 416 | CODE | |
| LOW | sandbox/grist/xmlrunner.py | 10 | CODE | |
| LOW | sandbox/grist/test_prevnext.py | 5 | CODE | |
| LOW | sandbox/grist/test_codebuilder.py | 2 | CODE | |
| LOW | sandbox/grist/engine.py | 41 | CODE | |
| LOW | sandbox/grist/test_renames2.py | 2 | CODE | |
| LOW | sandbox/grist/test_lookup_find.py | 3 | CODE | |
| LOW | sandbox/grist/grist.py | 8 | CODE | |
| LOW | sandbox/grist/grist.py | 8 | CODE | |
| LOW | sandbox/grist/grist.py | 8 | CODE | |
| LOW | sandbox/grist/grist.py | 8 | CODE | |
| LOW | sandbox/grist/grist.py | 8 | CODE | |
| LOW | sandbox/grist/grist.py | 8 | CODE | |
| LOW | sandbox/grist/grist.py | 8 | CODE | |
| LOW | sandbox/grist/grist.py | 8 | CODE | |
| LOW | sandbox/grist/grist.py | 8 | CODE | |
| LOW | sandbox/grist/grist.py | 8 | CODE | |
| LOW | sandbox/grist/grist.py | 8 | CODE | |
| LOW | sandbox/grist/grist.py | 8 | CODE | |
| LOW | sandbox/grist/grist.py | 8 | CODE | |
| LOW | sandbox/grist/grist.py | 8 | CODE | |
| LOW | sandbox/grist/grist.py | 10 | CODE | |
| LOW | sandbox/grist/grist.py | 10 | CODE | |
| LOW | sandbox/grist/grist.py | 10 | CODE | |
| LOW | sandbox/grist/grist.py | 10 | CODE | |
| LOW | sandbox/grist/grist.py | 10 | CODE | |
| LOW | sandbox/grist/grist.py | 13 | CODE | |
| LOW | sandbox/grist/runtests.py | 11 | CODE | |
| LOW | sandbox/grist/functions/logical.py | 2 | CODE | |
| LOW | sandbox/grist/functions/__init__.py | 2 | CODE | |
| LOW | sandbox/grist/functions/__init__.py | 3 | CODE | |
| LOW | sandbox/grist/functions/__init__.py | 4 | CODE | |
| LOW | sandbox/grist/functions/__init__.py | 5 | CODE | |
| LOW | sandbox/grist/functions/__init__.py | 6 | CODE | |
| LOW | sandbox/grist/functions/__init__.py | 7 | CODE | |
| LOW | sandbox/grist/functions/__init__.py | 8 | CODE | |
| LOW | sandbox/grist/functions/__init__.py | 9 | CODE | |
| LOW | sandbox/grist/functions/__init__.py | 10 | CODE | |
| LOW | sandbox/grist/functions/stats.py | 6 | CODE | |
| LOW | sandbox/grist/functions/math.py | 3 | CODE | |
| LOW | sandbox/grist/functions/info.py | 4 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | sandbox/grist/test_replay.py | 63 | CODE | |
| LOW | sandbox/grist/test_engine.py | 446 | CODE | |
| LOW | sandbox/grist/useractions.py | 651 | CODE | |
| LOW | sandbox/grist/useractions.py | 729 | CODE | |
| LOW | sandbox/grist/useractions.py | 859 | CODE | |
| LOW | sandbox/grist/useractions.py | 1078 | CODE | |
| LOW | sandbox/grist/test_table_data_set.py | 72 | CODE | |
| LOW | sandbox/grist/test_table_data_set.py | 118 | CODE | |
| LOW | sandbox/grist/codebuilder.py | 87 | CODE | |
| LOW | sandbox/grist/codebuilder.py | 514 | CODE | |
| LOW | sandbox/grist/lookup.py | 314 | CODE | |
| LOW | sandbox/grist/formula_prompt.py | 17 | CODE | |
| LOW | sandbox/grist/formula_prompt.py | 54 | CODE | |
| LOW | sandbox/grist/formula_prompt.py | 89 | CODE | |
| LOW | sandbox/grist/actions.py | 194 | CODE | |
| LOW | sandbox/grist/trigger_expression.py | 23 | CODE | |
| LOW | sandbox/grist/test_migrations.py | 8 | CODE | |
| LOW | sandbox/grist/engine.py | 379 | CODE | |
| LOW | sandbox/grist/engine.py | 568 | CODE | |
| LOW | sandbox/grist/engine.py | 760 | CODE | |
| LOW | sandbox/grist/engine.py | 946 | CODE | |
| LOW | sandbox/grist/engine.py | 1211 | CODE | |
| LOW | sandbox/grist/acl.py | 84 | CODE | |
| LOW | sandbox/grist/acl.py | 113 | CODE | |
| LOW | sandbox/grist/import_actions.py | 71 | CODE | |
| LOW | sandbox/grist/import_actions.py | 119 | CODE | |
| LOW | sandbox/grist/import_actions.py | 182 | CODE | |
| LOW | sandbox/grist/migrations.py | 481 | CODE | |
| LOW | sandbox/grist/depend.py | 124 | CODE | |
| LOW | sandbox/grist/table.py | 373 | CODE | |
| LOW | sandbox/grist/table.py | 396 | CODE | |
| LOW | sandbox/grist/usertypes.py | 183 | CODE | |
| LOW | sandbox/grist/usertypes.py | 302 | CODE | |
| LOW | sandbox/grist/usertypes.py | 334 | CODE | |
| LOW | sandbox/grist/usertypes.py | 362 | CODE | |
| LOW | sandbox/grist/usertypes.py | 476 | CODE | |
| LOW | sandbox/grist/column.py | 589 | CODE | |
| LOW | sandbox/grist/objtypes.py | 163 | CODE | |
| LOW | sandbox/grist/objtypes.py | 222 | CODE | |
| LOW | sandbox/grist/imports/import_json.py | 151 | CODE | |
| LOW | sandbox/grist/imports/import_xls.py | 42 | CODE | |
| LOW | sandbox/grist/functions/schedule.py | 221 | CODE | |
| LOW | sandbox/grist/functions/info.py | 599 | CODE | |
| LOW | sandbox/grist/functions/info.py | 663 | CODE | |
| LOW | sandbox/grist/functions/date.py | 14 | CODE | |
| LOW | sandbox/grist/functions/date.py | 193 | CODE | |
| LOW | sandbox/grist/functions/date.py | 644 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | app/server/lib/Triggers.ts | 571 | // as a class that overrides __bool__ to return False, but still allows field access without errors. | COMMENT |
| HIGH | app/client/ui/GridViewMenusDateHelpers.ts | 76 | TIME_BUCKET: "if not $Column:\n return None\n" + | CODE |
| HIGH | app/client/widgets/ConditionalStyle.ts | 148 | t("Rule must return True or False")); | CODE |
| HIGH | test/nbrowser/GridViewNewColumnMenuDateHelpers.ts | 247 | formula: "if not $EventDate:\n return None\n" + | CODE |
| HIGH | test/nbrowser/Formulas.ts | 191 | return None | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | buildtools/update_type_info.sh | 24 | # Check if source file exists | COMMENT |
| LOW | buildtools/update_type_info.sh | 29 | # Check if source file is newer than the type info file or force flag is set | COMMENT |
| LOW | sandbox/gvisor/get_checkpoint_path.sh | 33 | # Check if a trivial command works under gvisor with the proposed flags. | COMMENT |
| LOW | sandbox/grist/useractions.py | 908 | # Check if we are seeing a mention of a column that's getting renamed. | COMMENT |
| LOW | sandbox/grist/engine.py | 653 | # Check if any potentially unused LookupMaps are still unused, and if so, delete them. | COMMENT |
| LOW | sandbox/grist/engine.py | 1167 | # Set flag to rebuild dependencies of trigger columns after any potential renames, etc. | COMMENT |
| LOW | sandbox/grist/engine.py | 1530 | # Check if out_actions ActionObj grew at all since _get_undo_checkpoint(). If yes, revert by | COMMENT |
| LOW | sandbox/grist/migrations.py | 511 | # Set formula to use the current visibleCol in widgetOptions. | COMMENT |
| LOW | sandbox/grist/table.py | 756 | # Check if col_id is in the immediate dictionary of self.Record[Set]; if missing, or inherited | COMMENT |
| LOW | sandbox/grist/table.py | 782 | # Check if 'id' is mentioned explicitly. If so, then no fallback to 'manualSort', or anything | COMMENT |
| LOW | sandbox/grist/functions/date.py | 921 | # Check if the current date is a weekday (Monday=0, Sunday=6) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/server/lib/NSandbox.ts | 712 | // Step 1: Create a sandbox. If a flavor is given, create that exact flavor. | COMMENT |
| LOW | app/server/lib/NSandbox.ts | 728 | // Step 2: Run a simple Python call to check if the sandbox can execute code. | COMMENT |
| LOW | app/server/lib/NSandbox.ts | 739 | // Step 3: Stop the sandbox. If we get here, everything worked. | COMMENT |
| LOW | app/common/NumberParse.ts | 238 | // but for currencies we need to check if there are fewer decimal places than the default. | COMMENT |
| LOW | app/gen-server/lib/homedb/HomeDBManager.ts | 1081 | // We need to check if the current user is disabled or not. In | COMMENT |
| LOW⚡ | test/nbrowser/gristUtils.ts | 4360 | // Step 1: Set fixed size of the window to ensure consistent outer dimensions, and prevent maximized | COMMENT |
| LOW⚡ | test/nbrowser/gristUtils.ts | 4364 | // Step 2: Get outer vs inner difference | COMMENT |
| LOW | test/nbrowser/gristUtils.ts | 4375 | // Step 3: Set outer window size to match desired viewport | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/server/lib/SQLiteDB.ts | 5 | * Here's a simple example, | COMMENT |
| LOW | app/client/ui2018/stretchedLink.ts | 4 | * Don't forget to apply the `position: relative` CSS property to the parent block you want the link to cover. | COMMENT |
| LOW | app/client/components/BaseView.ts | 688 | // Use document timezone. Don't forget to use uppercase HH for 24-hour time. | COMMENT |
| LOW⚡ | sandbox/grist/test_lookup_sort.py | 464 | # (this is a way to check that we don't forget to clean up stale lookup helper columns). | COMMENT |
| LOW⚡ | sandbox/grist/test_lookup_sort.py | 464 | # (this is a way to check that we don't forget to clean up stale lookup helper columns). | COMMENT |
| MEDIUM | sandbox/grist/records.py | 283 | certain date, here is how you can do it old-style: | STRING |
| LOW | sandbox/pyodide/env.sh | 1 | # When you update this, make sure to update worker/package.json and worker/yarn.lock, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/server/lib/NSandbox.ts | 712 | // Step 1: Create a sandbox. If a flavor is given, create that exact flavor. | COMMENT |
| LOW | app/server/lib/NSandbox.ts | 728 | // Step 2: Run a simple Python call to check if the sandbox can execute code. | COMMENT |
| LOW | app/server/lib/NSandbox.ts | 739 | // Step 3: Stop the sandbox. If we get here, everything worked. | COMMENT |
| LOW⚡ | test/nbrowser/gristUtils.ts | 4360 | // Step 1: Set fixed size of the window to ensure consistent outer dimensions, and prevent maximized | COMMENT |
| LOW⚡ | test/nbrowser/gristUtils.ts | 4364 | // Step 2: Get outer vs inner difference | COMMENT |
| LOW | test/nbrowser/gristUtils.ts | 4375 | // Step 3: Set outer window size to match desired viewport | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | sandbox/grist/engine.py | 92 | # In this implementation, rows are identified by a row_id, which functions like an index, so that | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | sandbox/grist/import_actions.py | 76 | If dst_table is null, copy all src columns | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/nbrowser/CustomView.ts | 892 | async function getData(shown: number) { | CODE |
| LOW | sandbox/grist/test_completion.py | 161 | def test_function(self): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | sandbox/grist/functions/__init__.py | 13 | __all__ = [k for k in dir() if not k.startswith('_') and k.isupper()] | CODE |
| LOW | sandbox/grist/functions/schedule.py | 7 | __all__ = ['SCHEDULE'] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/server/lib/Authorizer.ts | 432 | // TODO: implement userSelector for rest API, to allow "sticky" user selection on pages. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | sandbox/grist/useractions.py | 2494 | CODE |