category

# `code_metrics_utilities`

Internal predicates for analyzing source code.

Author: Ebrahim Azarisooreh
Version: 0.6
Date: 2018/6/8
Compilation flags:
`static`

(no dependencies on other entities)

## Public interface

(none)

## Protected interface

(none)

## Private predicates

### `ancestor/4`

True if Entity descends from Ancestor, and EntityKind and AncestorKind unify with their respective entity types.

Compilation flags:
`static`
Template:
`ancestor(EntityKind,Entity,AncestorKind,Ancestor)`
Mode and number of proofs:
`ancestor(?entity,?entity_identifier,?entity,?entity_identifier)` - `zero_or_more`

### `current_entity/1`

True if Entity is a currently loaded entity.

Compilation flags:
`static`
Template:
`current_entity(Entity)`
Mode and number of proofs:
`current_entity(?entity_identifier)` - `zero_or_more`

### `declares_predicate/2`

True if Entity declares Predicate internally.

Compilation flags:
`static`
Template:
`declares_predicate(Entity,Predicate)`
Mode and number of proofs:
`declares_predicate(?entity_identifier,?predicate_indicator)` - `zero_or_more`

### `defines_predicate/2`

True if Entity defines an implementation of Predicate internally. ‘Auxiliary’ predicates are excluded from results.

Compilation flags:
`static`
Template:
`defines_predicate(Entity,Predicate)`
Mode and number of proofs:
`defines_predicate(?entity_identifier,?predicate_indicator)` - `zero_or_more`

### `defines_predicate/3`

Same as defines_predicate/2, except Property is unified with a corresponding property defined in the grammar.

Compilation flags:
`static`
Template:
`defines_predicate(Entity,Predicate,Property)`
Mode and number of proofs:
`defines_predicate(?entity_identifier,?predicate_indicator,?term)` - `zero_or_more`

### `entity_calls/3`

True if a predicate Caller within Entity makes a Call.

Compilation flags:
`static`
Template:
`entity_calls(Entity,Caller,Call)`
Mode and number of proofs:
`entity_calls(?entity_identifier,?predicate_indicator,?predicate_indicator)` - `zero_or_one`

### `entity_kind/2`

True if Kind defines Entity and is one of category, protocol, or object.

Compilation flags:
`static`
Template:
`entity_kind(Entity,Kind)`
Mode and number of proofs:
`entity_kind(+entity_identifier,-entity)` - `zero_or_one`

### `entity_property/2`

True if Property is a valid property of Entity. Entity can be either a category, a protocol, or an object.

Compilation flags:
`static`
Template:
`entity_property(Entity,Property)`
Mode and number of proofs:
`entity_property(+entity_identifier,-term)` - `zero_or_more`

### `entity_updates/3`

True if a predicate Updater within Entity makes a dynamic update to Update (by e.g. asserta/1, retract/1, etc.)

Compilation flags:
`static`
Template:
`entity_updates(Entity,Updater,Update)`
Mode and number of proofs:
`entity_updates(+entity_identifier,?predicate_indicator,?predicate_indicator)` - `zero_or_one`

## Operators

(none)

## Remarks

- Usage: This is meant to be imported by any metric added to the system.

- Predicate Scope: This is meant for internal use by metrics only. As such, all provided predicates are private.