# core/predicates/eslint.predicate.ts

> 21 lines of code and 8 definitions.

Tree: GovLab Quality
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/quality#file-quality-core-predicates-eslint-predicate-ts
Source text: https://banes-lab.com/source/quality/core/predicates/eslint.predicate.ts.txt

Listed in [core/predicates](https://banes-lab.com/api/source/quality/core/predicates.md), after [core/predicates/css.predicate.ts](https://banes-lab.com/source/quality/core/predicates/css.predicate.ts.md) and before [core/predicates/failure.predicate.ts](https://banes-lab.com/source/quality/core/predicates/failure.predicate.ts.md).

## Definitions

- `inHostScope` (lexical_declaration, line 12, exported)
- `isPlugin` (lexical_declaration, line 17, exported)
- `isParser` (lexical_declaration, line 19, exported)
- `underAny` (lexical_declaration, line 8, exported)
- `isRuleEntry` (lexical_declaration, line 21, exported)
- `isRuleModule` (lexical_declaration, line 26, exported)
- `{ layout }` (lexical_declaration, line 13, exported)
- `isCorePlugin` (lexical_declaration, line 24, exported)

## Contained in

- [core/predicates](https://banes-lab.com/anatomy/quality/folder-quality-core-predicates.md)

## Uses

- [core/predicates/filename.predicate.ts](https://banes-lab.com/source/quality/core/predicates/filename.predicate.ts.md)

## Used by

- [core/converters/eslint.converter.ts](https://banes-lab.com/source/quality/core/converters/eslint.converter.ts.md)
- [core/converters/rule.converter.ts](https://banes-lab.com/source/quality/core/converters/rule.converter.ts.md)
- [core/factories/eslint.scope.factory.ts](https://banes-lab.com/source/quality/core/factories/eslint.scope.factory.ts.md)
- [core/quality/eslint/no-inline-events.eslint.rule.ts](https://banes-lab.com/source/quality/core/quality/eslint/no-inline-events.eslint.rule.ts.md)
- [core/quality/eslint/no-inline-style.eslint.rule.ts](https://banes-lab.com/source/quality/core/quality/eslint/no-inline-style.eslint.rule.ts.md)
- [core/quality/eslint/no-inline-types.eslint.rule.ts](https://banes-lab.com/source/quality/core/quality/eslint/no-inline-types.eslint.rule.ts.md)

## Linked from

- [core/converters](https://banes-lab.com/anatomy/quality/folder-quality-core-converters.md)
- [core/factories](https://banes-lab.com/anatomy/quality/folder-quality-core-factories.md)
- [core/predicates](https://banes-lab.com/anatomy/quality/folder-quality-core-predicates.md)
- [core/quality/eslint](https://banes-lab.com/anatomy/quality/folder-quality-core-quality-eslint.md)

## Source

```typescript
import type { ESLint, Linter, Rule } from "eslint";
import type { FilenameCarrier, ScopeCarrier } from "#types/eslint.types";
import { CORE_PLUGIN_SCOPE } from "#configuration/constants/eslint.constants";
import { containsAny } from "#core/predicates/filename.predicate";
import { govlabSettings } from "#core/selectors/eslint.selector";
import { isRecord } from "#core/selectors/record.selector";

export const underAny = function underAny(context: FilenameCarrier, fragments?: readonly string[]): boolean {
    return containsAny(context.filename, fragments);
};

export const inHostScope = function inHostScope(context: ScopeCarrier): boolean {
    const { layout } = govlabSettings(context);
    return underAny(context, layout?.frontendMarkers) && !underAny(context, layout?.backendMarkers);
};

export const isPlugin = (value: unknown): value is ESLint.Plugin => isRecord(value);

export const isParser = (value: unknown): value is Linter.Parser => isRecord(value);

export const isRuleEntry = (value: unknown): value is Linter.RuleEntry =>
    typeof value === "string" || typeof value === "number" || Array.isArray(value);

export const isCorePlugin = (npm: string): boolean => npm.startsWith(CORE_PLUGIN_SCOPE);

export const isRuleModule = function isRuleModule(value: unknown): value is Rule.RuleModule {
    return isRecord(value) && typeof value["create"] === "function";
};
```
