Diagnostic codes: may-import: A file of a row of an import table imports something that its row does not list. # may-import > A file of a row of an import table imports something that its row does not list. Rule violations. This text is what `archangel docs may-import` prints. A file of a row of an import table imports something that its row does not list. ## Example ```ts mayImport('feature-code', { views: ['models', 'shared'], models: ['api', 'shared'], api: ['shared'], }, { kinds: 'src/features/*/{kind}/**' }) ``` The file `src/features/cart/views/cart-page.tsx` imports `src/features/cart/api/fetch-cart.ts`. The row `views` does not list `api`, so archangel reports a violation of the rule `feature-code.views`. ## What a row means Each row is one rule, with the name `.`. A row has one of two shapes. A row that permits its own name is this sentence: ```ts rule('feature-code.views', { files: 'views', mayOnlyImport: ['models', 'shared'], within: 'the repository and the externals sets that the table names', }) ``` A row in `mayNotImportItself` has this sentence too, without the permission of its own name, and a second sentence: ```ts rule({ files: 'port', mayNotImport: 'port' }) ``` A row permits its own name in the same instance. A capture in a part, or a capture other than `{kind}` in a kind pattern, makes an instance. A row that lists its own name in a cell permits every instance. The own-instance permission applies only when `files` names exactly one part or the row names one kind: a rule with `files: ['feature']`, a list, permits all instances. A table judges an outside package only when one of its cells, or `everyRowMayImport`, names an externals set that holds the package. Each table also makes the rule `
.every-file-has-a-kind`. A file in the table’s files that is in no row breaks this rule. A table without `files` leaves a file with no kind outside the table. Write `files` to close that gap. ## What to do Remove the import, or move the code to a file whose row permits the import. If the design has changed, add the target to the row. To permit one import for a time, write an exception that names the row.