<commit_before>import React from 'react';
import SPELLS from 'common/SPELLS';
import SpellIcon from 'common/SpellIcon';
import SpellLink from 'common/SpellLink';
import Analyzer, { SELECTED_PLAYER } from 'parser/core/Analyzer';
import Events from 'parser/core/Events';
import Abilities from 'parser/shared/modules/Abilities';
import SpellUsable from 'parser/shared/modules/SpellUsable';
import StatisticBox from 'interface/others/StatisticBox';
import calculateMaxCasts from 'parser/core/calculateMaxCasts';
import HIT_TYPES from 'game/HIT_TYPES';
import { formatNumber, formatPercentage } from 'common/format';
import { REDUCTION_TIME as RP_REDUCTION_TIME } from '../talents/RighteousProtector';

const HEAL_DELAY_THRESHOLD = 2000;

export default class LightOfTheProtector extends Analyzer {
  static dependencies = {
    spells: SpellUsable,
    abilities: Abilities,
  };

  _lastHit = null;
  _msTilHeal = 0;
  _delays = [];

  _activeSpell = SPELLS.LIGHT_OF_THE_PROTECTOR;

  _overhealing = 0;
  _actualHealing = 0;

  constructor(props) {
    super(props);
    if(this.selectedCombatant.hasTalent(SPELLS.HAND_OF_THE_PROTECTOR_TALENT.id)) {
      this._activeSpell = SPELLS.HAND_OF_THE_PROTECTOR_TALENT;
    }
<commit_msg>added comment explaining relation of lotp module to hotp<commit_after>import React from 'react';
import SPELLS from 'common/SPELLS';
import SpellIcon from 'common/SpellIcon';
import SpellLink from 'common/SpellLink';
import Analyzer, { SELECTED_PLAYER } from 'parser/core/Analyzer';
import Events from 'parser/core/Events';
import Abilities from 'parser/shared/modules/Abilities';
import SpellUsable from 'parser/shared/modules/SpellUsable';
import StatisticBox from 'interface/others/StatisticBox';
import calculateMaxCasts from 'parser/core/calculateMaxCasts';
import HIT_TYPES from 'game/HIT_TYPES';
import { formatNumber, formatPercentage } from 'common/format';
import { REDUCTION_TIME as RP_REDUCTION_TIME } from '../talents/RighteousProtector';

const HEAL_DELAY_THRESHOLD = 2000;

/**
 * Light of the Protector / Hand of the Protector shared analysis
 *
 * Many of the behaviors are shared between the two abilities, and this
 * module handles those.
 *
 * Behavior specific to HotP should be placed in a separate
 * HandOfTheProtector module.
 *
 * Sample Log: https://www.warcraftlogs.com/reports/WP3FTxYwkLXyVRac/#fight=2&source=20
 */
export default class LightOfTheProtector extends Analyzer {
  static dependencies = {
    spells: SpellUsable,
    abilities: Abilities,
  };

  _lastHit = null;
  _msTilHeal = 0;
  _delays = [];

  _activeSpell = SPELLS.LIGHT_OF_THE_PROTECTOR;

  _overhealing = 0;
  _actualHealing = 0;

  constructor(props) {
    super(props);
    if(this.selectedCombatant.hasTalent(SPELLS.HAND_OF_THE_PROTECTOR_TALENT.id)) {
      this._activeSpell = SPELLS.HAND_OF_THE_PROTECTOR_TALENT;
    }

{'fraction_non_alphanumeric': 0.09415470773538677, 'fraction_numerical': 0.006300315015750788, 'mean_word_length': 5.199566160520607, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5107801', 'n_tokens_mistral': 970, 'n_tokens_neox': 945, 'n_words': 222}