/// <summary> /// Handles the variable_complex_reference if it is a Sylvre library reference. /// </summary> /// <param name="context">The variable_complex_reference to handle.</param> /// <param name="isFunctionCall">Whether the Sylvre library reference is a function call or not.</param> private void HandleSylvreLibraryReference(Variable_complex_referenceContext context, bool isFunctionCall) { var suffixes = context.variable_suffix(); if (suffixes == null || suffixes.Length == 0) { _transpileErrors.Add(new SylvreTranspileError { CharPositionInLine = context.variable_reference().Stop.Column, Line = context.variable_reference().Stop.Line, Symbol = context.variable_reference().Stop.Text, Message = _sylvreMissingModuleMessage }); return; } var firstSuffixContext = context.variable_suffix()[0]; if (firstSuffixContext.index_reference() != null) { _transpileErrors.Add(new SylvreTranspileError { CharPositionInLine = firstSuffixContext.index_reference().Start.Column + 1, // Column number 1 behind, zero based index? Line = firstSuffixContext.index_reference().Start.Line, Symbol = firstSuffixContext.index_reference().Start.Text, Message = _sylvreLibraryIndexReferenceInvalidMessage }); return; } var moduleContext = firstSuffixContext.member_reference().variable_reference(); string module = moduleContext.GetText(); if (!SylvreJavaScriptMappings.DoesSylvreModuleExist(module)) { _transpileErrors.Add(new SylvreTranspileError { CharPositionInLine = moduleContext.Start.Column + 1, // Column number 1 behind, zero based index? Line = moduleContext.Start.Line, Symbol = moduleContext.Start.Text, Message = _sylvreInvalidModuleMessage }); return; } string jsEquivalentModule = SylvreJavaScriptMappings.GetEquivalentJavaScriptModule(module); if (!string.IsNullOrWhiteSpace(jsEquivalentModule)) { _output.Append(jsEquivalentModule) .Append('.'); } if (suffixes.Length <= 1) { _transpileErrors.Add(new SylvreTranspileError { CharPositionInLine = moduleContext.Stop.Column, Line = moduleContext.Stop.Line, Symbol = moduleContext.Stop.Text, Message = _sylvreMissingModuleMemberMessage }); return; } var secondSuffixContext = context.variable_suffix()[1]; if (secondSuffixContext.index_reference() != null) { _transpileErrors.Add(new SylvreTranspileError { CharPositionInLine = secondSuffixContext.index_reference().Start.Column + 1, // Column number 1 behind, zero based index? Line = secondSuffixContext.index_reference().Start.Line, Symbol = secondSuffixContext.index_reference().Start.Text, Message = _sylvreModuleIndexReferenceInvalidMessage }); return; } var moduleMemberContext = secondSuffixContext.member_reference().variable_reference(); string moduleMember = moduleMemberContext.GetText(); if (!SylvreJavaScriptMappings.DoesSylvreMemberOfModuleExist(module, moduleMember)) { _transpileErrors.Add(new SylvreTranspileError { CharPositionInLine = moduleMemberContext.Start.Column + 1, // Column number 1 behind, zero based index? Line = moduleMemberContext.Start.Line, Symbol = moduleMemberContext.Start.Text, Message = _sylvreInvalidModuleMemberMessage }); return; } _output.Append(SylvreJavaScriptMappings.GetEquivalentJavaScriptMemberOfModule( module, moduleMember)); for (int i = 2; i < context.variable_suffix().Length; i++) { VisitVariable_suffix(context.variable_suffix()[i]); } }
public void Should_Output_False_For_Invalid_Sylvre_Module_Member(string module, string member) { bool exists = SylvreJavaScriptMappings.DoesSylvreMemberOfModuleExist(module, member); Assert.IsFalse(exists); }