Class: Uniword::Quality::StyleConsistencyRule

Inherits:
QualityRule
  • Object
show all
Defined in:
lib/uniword/quality/rules/style_consistency_rule.rb

Overview

Checks for direct formatting instead of styles.

Responsibility: Validate consistent use of styles. Single Responsibility - only checks style consistency.

Validates:

  • Paragraphs use standard styles instead of direct formatting

  • Direct formatting is used appropriately (if allowed)

  • Document maintains consistent appearance

Examples:

Configuration

style_consistency:
  enabled: true
  allow_direct_formatting: false
  require_standard_styles: true

Instance Attribute Summary

Attributes inherited from QualityRule

#config, #enabled

Instance Method Summary collapse

Methods inherited from QualityRule

#enabled?, #name

Constructor Details

#initialize(config = {}) ⇒ StyleConsistencyRule

Returns a new instance of StyleConsistencyRule.



21
22
23
24
25
26
# File 'lib/uniword/quality/rules/style_consistency_rule.rb', line 21

def initialize(config = {})
  super
  @allow_direct_formatting = @config.fetch(:allow_direct_formatting,
                                           false)
  @require_standard_styles = @config.fetch(:require_standard_styles, true)
end

Instance Method Details

#check(document) ⇒ Array<QualityViolation>

Check document for style consistency violations

Parameters:

  • document (Document)

    The document to check

Returns:



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/uniword/quality/rules/style_consistency_rule.rb', line 32

def check(document)
  violations = []

  document.paragraphs.each_with_index do |para, index|
    # Skip empty paragraphs
    next if para.empty?

    # Check if paragraph has no style but has formatting
    if @require_standard_styles && !has_style?(para) && has_formatting?(para)
      violations << create_violation(
        severity: :warning,
        message: "Paragraph #{index + 1} uses direct formatting instead of a style. " \
                 "Consider applying a standard paragraph style.",
        location: "Paragraph #{index + 1}",
        element: para,
      )
    end

    # Check runs for direct formatting
    next if @allow_direct_formatting

    para.runs.each_with_index do |run, run_index|
      next unless run.respond_to?(:properties)
      next unless run.properties

      next unless has_direct_run_formatting?(run)

      violations << create_violation(
        severity: :info,
        message: "Direct text formatting detected in paragraph #{index + 1}, run #{run_index + 1}. " \
                 "Consider using character styles for consistency.",
        location: "Paragraph #{index + 1}, Run #{run_index + 1}",
        element: run,
      )
    end
  end

  violations
end